		PAGE    60,132


data_56		=	56h
data_5f		=	5Fh
data_60		=	60h
data_64		=	64h
data_6c		=	6Ch
data_80		=	80h
data_81		=	81h
data_487	=	487h


;ÄÄÄÄÄÄÄÄÄÄ CODE_SEG_1  ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

CODE_SEG_1	segment para public
CODE_SEG_1	ends



;ÄÄÄÄÄÄÄÄÄÄ DATA_SEG_2  ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

DATA_SEG_2	segment para public
DATA_SEG_2	ends



;ÄÄÄÄÄÄÄÄÄÄ STACK_SEG_3  ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

STACK_SEG_3	segment stack
STACK_SEG_3	ends



;ÄÄÄÄÄÄÄÄÄÄ CODE_SEG_1  ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

CODE_SEG_1	segment para public
		assume  CS:CODE_SEG_1, DS:nothing, SS:STACK_SEG_3, ES:nothing

		dw	8 dup (0)

;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
;±
;±		ENTRY POINT
;±
;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±


;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
;±
;±		PROCEDURE proc_start
;±
;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±

proc_start	proc	far
start:		; N-Ref=0
		mov	AX,DATA_SEG_2		
		mov	DS,AX			

;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
		assume  DS:DATA_SEG_2
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ

		cli				; Disable interrupts
		mov	SS,AX			

;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
		assume  SS:DATA_SEG_2
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ

		mov	SP,230h			
		sti				; Enable interrupts
		mov	BX,SP			
		mov	CL,4			
		shr	BX,CL			; Shift right ( fill zeros )
		add	AX,BX			
		mov	BX,ES			
		sub	AX,BX			
		mov	BX,AX			
		mov	AH,4Ah			; 'J'
		int	21h			; DOS func ( ah ) = 4Ah
						; Modify allocated memory block
						;BX-requested size,paragraphs
						; ES-seg addrs of block
						;if CF=1 AX-ret code
						; BX-max possible size if fail
		mov	BX,0FFFh		
loc_1:		; N-Ref=1
		mov	AH,48h			; 'H'
		int	21h			; DOS func ( ah ) = 48h
						; Allocate memory
						;BX-mem request in paragraphs
						;if CF=1 AX-ret code, else
						; AX-seg BX-block size if fail
		jb	loc_1			; Jump if below ( < )
		mov	Word Ptr var2_66,AX	; [75B4:0066] = 0
		mov	Word Ptr var2_68,BX	; [75B4:0068] = 0
		mov	AH,30h			; '0'
		int	21h			; DOS func ( ah ) = 30h
						; Get DOS version number
						;AL/AH-major/minor ver number
		cmp	AL,2			
		jnl	loc_2			; Jump if not less ( >= )
		mov	DX,0E3h			
		mov	AH,9			
		int	21h			; DOS func ( ah ) = 9
						; Display string
						;DS:DX-output string
		int	20h			; Program terminate
loc_2:		; N-Ref=1
		call	near ptr proc_9		
		or	AX,AX			
		je	loc_3			; Jump if equal ( = )
		mov	Word Ptr var2_5a,AX	; [75B4:005A] = 18h
		dec	Byte Ptr var2_5f	; [75B4:005F] = 1
loc_3:		; N-Ref=1
		mov	AH,0Fh			
		int	10h			; BIOS Service func ( ah ) = 0Fh
						; Get current video mode
						;AH-width AL-mode BH-page
		mov	Byte Ptr var2_5c,AL	; [75B4:005C] = 0
		mov	Byte Ptr var2_5d,BH	; [75B4:005D] = 0
		mov	DL,AL			
		cmp	DL,7			
		je	loc_4			; Jump if equal ( = )
		cmp	DL,0Fh			
		jne	loc_5			; Jump if not equal ( != )
loc_4:		; N-Ref=1
		mov	Word Ptr var2_60,0B000h	; [75B4:0060] = 0B800h
		mov	Byte Ptr var2_62,70h	; [75B4:0062] = 1730h  'p'
		mov	Byte Ptr var2_63,7	; [75B4:0063] = 17h
		dec	Byte Ptr var2_5f	; [75B4:005F] = 1
		cmp	AL,0Fh			
		jne	loc_9			; Jump if not equal ( != )
		mov	DL,7			
		jmp	short loc_8		
loc_5:		; N-Ref=1
		cmp	DL,7			
		jnle	loc_6			; Jump if greater ( > )
		cmp	DL,4			
		jnle	loc_7			; Jump if greater ( > )
		je	loc_6			; Jump if equal ( = )
		test	DL,1			
		je	loc_7			; Jump if equal ( = )
loc_6:		; N-Ref=2
		cmp	DL,3			
		je	loc_9			; Jump if equal ( = )
		mov	DL,3			
		jmp	short loc_8		
loc_7:		; N-Ref=2
		mov	Byte Ptr var2_62,70h	; [75B4:0062] = 1730h  'p'
		mov	Byte Ptr var2_63,7	; [75B4:0063] = 17h
		cmp	DL,2			
		je	loc_9			; Jump if equal ( = )
		mov	DL,2			
loc_8:		; N-Ref=2
		mov	AL,DL			
		xor	AH,AH			
		int	10h			; BIOS Service func ( ah ) = 0
						; Set video mode
						;AL = video mode
		mov	AL,0			
		mov	AH,5			
		int	10h			; BIOS Service func ( ah ) = 5
						; Set active display page 
						;AL-page number
		mov	Byte Ptr var2_5e,1	; [75B4:005E] = 100h
loc_9:		; N-Ref=3
		mov	BL,Byte Ptr ES:data_80	
		sub	BH,BH			
		mov	Word Ptr ES:data_81[BX],0	
		push	DS			
		mov	DX,82h			
		mov	AX,ES			
		mov	DS,AX			

;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
		assume  DS:nothing
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ

		mov	AX,3D00h		
		int	21h			; DOS func ( ah ) = 3Dh
						; Open file
						;CX-acsess code
						;  DS:DX-ASCIIZ string
						;AX-file handle
						; if CF=1 AX-error code
		pop	DS			

;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
		assume  DS:DATA_SEG_2
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ

		jb	loc_10			; Jump if below ( < )
		mov	Word Ptr var2_6a,AX	; [75B4:006A] = 0
		push	DS			
		sub	CX,CX			
		mov	DX,82h			
		mov	AX,ES			
		mov	DS,AX			

;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
		assume  DS:nothing
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ

		mov	AH,4Eh			; 'N'
		int	21h			; DOS func ( ah ) = 4Eh
						; FIND FIRST: Start file search
						;CX-attr to search on
						; DS:DX-ASCIIZ string
						;if CF=1 AX-ret code
		pop	DS			

;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
		assume  DS:DATA_SEG_2
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ

		jnb	loc_12			; Jump if not below ( >= )
loc_10:		; N-Ref=3
		mov	DX,offset var2_6e	
		mov	AH,9			
		int	21h			; DOS func ( ah ) = 9
						; Display string
						;DS:DX-output string
		mov	DX,offset var2_9f	
		mov	AH,0Ah			
		mov	SI,DX			
		int	21h			; DOS func ( ah ) = 0Ah
						; Buffered kbd input
						;DS:DX-ptr to input buffer
		inc	SI			
		mov	BL,Byte Ptr [SI]	
		sub	BH,BH			
		inc	SI			
		mov	Byte Ptr [BX+SI],0	
		mov	DX,offset var2_a1	
		mov	AX,3D00h		
		int	21h			; DOS func ( ah ) = 3Dh
						; Open file
						;CX-acsess code
						;  DS:DX-ASCIIZ string
						;AX-file handle
						; if CF=1 AX-error code
		jb	loc_11			; Jump if below ( < )
		mov	Word Ptr var2_6a,AX	; [75B4:006A] = 0
		sub	CX,CX			
		mov	DX,offset var2_a1	
		mov	AH,4Eh			; 'N'
		int	21h			; DOS func ( ah ) = 4Eh
						; FIND FIRST: Start file search
						;CX-attr to search on
						; DS:DX-ASCIIZ string
						;if CF=1 AX-ret code
		jnb	loc_12			; Jump if not below ( >= )
loc_11:		; N-Ref=1
		mov	DX,offset var2_83	
		mov	AH,9			
		int	21h			; DOS func ( ah ) = 9
						; Display string
						;DS:DX-output string
		mov	AH,8			
		int	21h			; DOS func ( ah ) = 8
						; Kbd input without echo
						;AL-input char
		and	AL,0DFh			
		cmp	AL,59h			; 'Y'
		je	loc_10			; Jump if equal ( = )
		jmp	loc_19			
loc_12:		; N-Ref=2
		mov	SI,9Eh			
		mov	DI,offset var2_1c	
		mov	AL,Byte Ptr ES:[SI]	
		inc	SI			
loop_loc_13:		; N-Ref=1
		mov	Byte Ptr [DI],AL	
		inc	DI			
		mov	AL,Byte Ptr ES:[SI]	
		inc	SI			
		or	AL,AL			
		loopnz	loop_loc_13		; Loop if ZF = 0, CX > 0
		mov	BX,Word Ptr var2_6a	; [75B4:006A] = 0
		sub	CX,CX			
		sub	DX,DX			
		mov	AX,4202h		
		int	21h			; DOS func ( ah ) = 42h
						; Move file pointer
						;AL-method code BX-file handle
						; CX_DX-offset value
						;if CF=1 AX-ret code
						; DX_AX-new ptr location
		push	DX			
		push	AX			
		sub	DX,DX			
		mov	AX,4200h		
		int	21h			; DOS func ( ah ) = 42h
						; Move file pointer
						;AL-method code BX-file handle
						; CX_DX-offset value
						;if CF=1 AX-ret code
						; DX_AX-new ptr location
		pop	AX			
		pop	DX			
		or	DX,DX			
		jne	loc_14			; Jump if not equal ( != )
		mov	Word Ptr var2_6c,AX	; [75B4:006C] = 0
		mov	CX,4			
		shr	AX,CL			; Shift right ( fill zeros )
		cmp	AX,Word Ptr var2_68	; [75B4:0068] = 0
		jle	loc_15			; Jump if not greater ( <= )
loc_14:		; N-Ref=1
		mov	DX,offset var2_103	
		mov	AH,9			
		int	21h			; DOS func ( ah ) = 9
						; Display string
						;DS:DX-output string
		mov	AX,4C02h		
		int	21h			; DOS func ( ah ) = 4Ch
						; Terminate process
						;AL-ret code
loc_15:		; N-Ref=1
		push	DS			
		mov	BX,Word Ptr var2_6a	; [75B4:006A] = 0
		mov	CX,Word Ptr var2_6c	; [75B4:006C] = 0
		lds	DX,Dword Ptr var2_64	; [75B4:0064] = 0  Load FAR ptr

;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
		assume  DS:nothing
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ

		mov	AH,3Fh			; '?'
		int	21h			; DOS func ( ah ) = 3Fh
						; Read from file or device
						;BX-file handle
						; CX-bytes to read  DS:DX-DTA
						;if CF=0 AX-bytes read
						; else AX-ret code
		pop	DS			

;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
		assume  DS:DATA_SEG_2
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ

		jnb	loc_16			; Jump if not below ( >= )
		jmp	loc_10			
loc_16:		; N-Ref=1
		mov	DI,AX			
		push	ES			
		mov	ES,Word Ptr var2_66	; [75B4:0066] = 0
		std				; Set direction flag
		mov	CX,0FFh			
		mov	AL,1Ah			
		repnz	scasb			; Repeat if ZF = 0, CX > 0
						; Scan DS:SI for byte in AL
		cld				; Clear direction flag
		jcxz	loc_17			; Jump if CX = 0
		inc	DI			
		mov	Word Ptr var2_6c,DI	; [75B4:006C] = 0
loc_17:		; N-Ref=1
		pop	ES			
		mov	DL,0			
		mov	DH,2Bh			; '+'
		xor	BH,BH			
		mov	AH,2			
		int	10h			; BIOS Service func ( ah ) = 2
						; Set cursor pos
						;BH-page DH-row DL-clmn
		xor	AX,AX			
		push	AX			
		call	near ptr proc_2		
loc_18:		; N-Ref=2
		mov	AH,7			
		int	21h			; DOS func ( ah ) = 7
						; Direct kbd input without echo
						;AL-input char
		cmp	AL,0			
		je	loc_21			; Jump if equal ( = )
		cmp	AL,1Bh			
		jne	loc_18			; Jump if not equal ( != )
loc_19:		; N-Ref=1
		mov	BX,Word Ptr var2_6a	; [75B4:006A] = 0
		mov	AH,3Eh			; '>'
		int	21h			; DOS func ( ah ) = 3Eh
						; Close file handle
						;BX-file handle
						;if CF=1 AX-ret code
		mov	ES,Word Ptr var2_66	; [75B4:0066] = 0
		mov	AH,49h			; 'I'
		int	21h			; DOS func ( ah ) = 49h
						; Free allocated memory
						;ES-seg adrs of block to return
						;if CF=1 AX-ret code
		cmp	Byte Ptr var2_5e,1	; [75B4:005E] = 100h
		jne	loc_20			; Jump if not equal ( != )
		mov	AL,Byte Ptr var2_5c	; [75B4:005C] = 0
		xor	AH,AH			
		int	10h			; BIOS Service func ( ah ) = 0
						; Set video mode
						;AL = video mode
		mov	AL,Byte Ptr var2_5d	; [75B4:005D] = 0
		mov	AH,5			
		int	10h			; BIOS Service func ( ah ) = 5
						; Set active display page 
						;AL-page number
loc_20:		; N-Ref=1
		mov	DX,Word Ptr var2_5a	; [75B4:005A] = 18h
		xchg	DL,DH			
		mov	CX,DX			
		mov	DL,4Fh			; 'O'
		mov	BH,7			
		mov	AX,600h			
		int	10h			; BIOS Service func ( ah ) = 6
						; Scroll window UP
						;BH-attr CH/CL-upr row/lft col
						; DH/DL-lwr row/rgt col AL-lines
		sub	DL,DL			
		xor	BH,BH			
		mov	AH,2			
		int	10h			; BIOS Service func ( ah ) = 2
						; Set cursor pos
						;BH-page DH-row DL-clmn
		mov	AX,4C00h		
		int	21h			; DOS func ( ah ) = 4Ch
						; Terminate process
						;AL-ret code
loc_21:		; N-Ref=1
		mov	AH,7			
		int	21h			; DOS func ( ah ) = 7
						; Direct kbd input without echo
						;AL-input char
		push	ES			
		push	DS			
		pop	ES			

;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
		assume  ES:DATA_SEG_2
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ

		mov	DI,offset var2_114	
		mov	CX,7			
		repnz	scasb			; Repeat if ZF = 0, CX > 0
						; Scan DS:SI for byte in AL
		pop	ES			

;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
		assume  ES:nothing
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ

		sub	DI,115h			
		shl	DI,1			; Shift left
		call	Word Ptr var2_11a[DI]	
		jmp	short loc_18		
proc_start	endp



		dw	6C7h, 64h, 0, 36FFh
		dw	64h, 6C7h, 56h, 1
		dw	3BE8h, 0C300h, 0FFB8h, 50FFh
		dw	33E8h, 0C300h, 5AA1h, 0F700h
		dw	50D8h, 29E8h, 0C300h

;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
;±
;±		PROCEDURE proc_1
;±
;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±

proc_1		proc	near
		mov	AX,Word Ptr var2_6c	; [75B4:006C] = 0
		mov	Word Ptr var2_64,AX	; [75B4:0064] = 0
		mov	Word Ptr var2_56,0FFFFh	; [75B4:0056] = 1
		mov	AX,Word Ptr var2_5a	; [75B4:005A] = 18h
		neg	AX			
		push	AX			
		call	near ptr proc_2		
		retn				
proc_1		endp



		dw	1B8h, 5000h, 0BE8h, 0C300h
		dw	36FFh, 5Ah, 3E8h, 0C300h
		dw	0C3h

;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
;±
;±		PROCEDURE proc_2
;±
;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±

proc_2		proc	near
		push	BP			
		mov	BP,SP			
		mov	ES,Word Ptr var2_66	; [75B4:0066] = 0
		mov	DI,Word Ptr var2_64	; [75B4:0064] = 0
		mov	CX,Word Ptr [BP+4]	
		mov	AX,0Ah			
		or	CX,CX			
		jnle	loc_23			; Jump if greater ( > )
		jl	loc_22			; Jump if less ( < )
		jmp	short loc_24		
loc_22:		; N-Ref=1
		call	near ptr proc_6		
		jmp	short loc_24		
loc_23:		; N-Ref=1
		call	near ptr proc_7		
loc_24:		; N-Ref=2
		cld				; Clear direction flag
		push	DI			
		push	ES			
		push	DS			
		pop	ES			

;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
		assume  ES:DATA_SEG_2
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ

		push	Word Ptr var2_56	; [75B4:0056] = 1
		mov	AX,0Dh			
		push	AX			
		call	near ptr proc_10	
		mov	CX,7			
		sub	CX,AX			
		mov	AL,20h			; ' '
		repz	stosb			; Repeat if ZF = 1, CX > 0
						; Store AL at ES:DI
		pop	ES			

;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
		assume  ES:nothing
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ

		mov	BL,Byte Ptr var2_62	; [75B4:0062] = 1730h
		mov	Byte Ptr var2_59,BL	; [75B4:0059] = 1800h
		push	DS			
		mov	AX,offset var2_6	
		push	AX			
		sub	AX,AX			
		push	AX			
		push	Word Ptr var2_58	; [75B4:0058] = 20h
		call	near ptr proc_3		
		pop	DI			
		mov	BL,Byte Ptr var2_63	; [75B4:0063] = 17h
		mov	Byte Ptr var2_59,BL	; [75B4:0059] = 1800h
		mov	SI,DI			
		mov	CX,Word Ptr var2_5a	; [75B4:005A] = 18h
loop_loc_25:		; N-Ref=1
		mov	BX,Word Ptr var2_5a	; [75B4:005A] = 18h
		inc	BX			
		sub	BX,CX			
		push	CX			
		push	Word Ptr var2_66	; [75B4:0066] = 0
		push	SI			
		push	BX			
		push	Word Ptr var2_58	; [75B4:0058] = 20h
		call	near ptr proc_3		
		push	SS			
		pop	DS			
		pop	CX			
		mov	SI,AX			
		cmp	AX,Word Ptr var2_6c	; [75B4:006C] = 0
		jnb	loc_26			; Jump if not below ( >= )
		loop	loop_loc_25		; Loop if CX > 0
		jmp	short loc_27		
loc_26:		; N-Ref=1
		dec	CX			
		jcxz	loc_27			; Jump if CX = 0
		mov	AL,50h			; 'P'
		mul	CL			; AX = AL * data
		push	Word Ptr var2_66	; [75B4:0066] = 0
		push	AX			
		push	Word Ptr var2_58	; [75B4:0058] = 20h
		call	near ptr proc_4		
		push	SS			
		pop	DS			
loc_27:		; N-Ref=2
		pop	BP			
		retn	2			
proc_2		endp



;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
;±
;±		PROCEDURE proc_3
;±
;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±

proc_3		proc	near
		push	BP			
		mov	BP,SP			
		sub	DX,DX			
		cmp	Byte Ptr var2_5f,1	; [75B4:005F] = 1
		jne	loc_28			; Jump if not equal ( != )
		mov	DX,3DAh			
loc_28:		; N-Ref=1
		mov	ES,Word Ptr var2_60	; [75B4:0060] = 0B800h
		mov	DS,Word Ptr [BP+0Ah]	

;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
		assume  DS:nothing
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ

		mov	SI,Word Ptr [BP+8]	
		mov	CX,50h			
		mov	AX,Word Ptr [BP+6]	
		mov	BX,0A0h			
		mul	BL			; AX = AL * data
		mov	DI,AX			
		mov	BX,DI			
		mov	AX,Word Ptr [BP+4]	
loop_loc_29:		; N-Ref=3
		lodsb				; Load byte at DS:SI to AL
		cmp	AL,0Dh			
		je	loc_32			; Jump if equal ( = )
		cmp	AL,9			
		jne	loc_30			; Jump if not equal ( != )
		call	near ptr proc_5		
		jcxz	loc_35			; Jump if CX = 0
		jmp	short loop_loc_29	
loc_30:		; N-Ref=1
		or	DX,DX			
		je	loc_31			; Jump if equal ( = )
		call	near ptr proc_11	
		loop	loop_loc_29		; Loop if CX > 0
		jmp	short loc_35		
loc_31:		; N-Ref=1
		stosw				; Store AX at ES:DI
		loop	loop_loc_29		; Loop if CX > 0
		jmp	short loc_35		
loc_32:		; N-Ref=1
		mov	AL,20h			; ' '
		or	DX,DX			
		je	loc_34			; Jump if equal ( = )
loop_loc_33:		; N-Ref=1
		call	near ptr proc_11	
		loop	loop_loc_33		; Loop if CX > 0
		inc	SI			
		jmp	short loc_37		
loc_34:		; N-Ref=1
		repz	stosw			; Repeat if ZF = 1, CX > 0
						; Store AX at ES:DI
		inc	SI			
		jmp	short loc_37		
loc_35:		; N-Ref=3
		mov	AH,0Ah			
loop_loc_36:		; N-Ref=1
		lodsb				; Load byte at DS:SI to AL
		cmp	AL,AH			
		loopnz	loop_loc_36		; Loop if ZF = 0, CX > 0
loc_37:		; N-Ref=2
		mov	AX,SI			
		pop	BP			
		retn	8			
proc_3		endp



;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
;±
;±		PROCEDURE proc_4
;±
;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±

proc_4		proc	near
		push	BP			
		mov	BP,SP			
		sub	DX,DX			
		cmp	Byte Ptr DS:data_5f,1	
		jne	loc_38			; Jump if not equal ( != )
		mov	DX,3DAh			
loc_38:		; N-Ref=1
		mov	ES,Word Ptr DS:data_60	
		mov	DS,Word Ptr [BP+8]	
		mov	CX,Word Ptr [BP+6]	
		mov	AX,Word Ptr [BP+4]	
		or	DX,DX			
		je	loc_40			; Jump if equal ( = )
loop_loc_39:		; N-Ref=1
		call	near ptr proc_11	
		loop	loop_loc_39		; Loop if CX > 0
		jmp	short loc_41		
loc_40:		; N-Ref=1
		repz	stosw			; Repeat if ZF = 1, CX > 0
						; Store AX at ES:DI
loc_41:		; N-Ref=1
		pop	BP			
		retn	6			
proc_4		endp



;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
;±
;±		PROCEDURE proc_5
;±
;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±

proc_5		proc	near
		push	BX			
		push	CX			
		sub	BX,DI			
		neg	BX			
		shr	BX,1			; Shift right ( fill zeros )
		mov	CX,8			
		and	BX,+7			
		sub	CX,BX			
		mov	BX,CX			
		mov	AL,20h			; ' '
		or	DX,DX			
		je	loc_43			; Jump if equal ( = )
loop_loc_42:		; N-Ref=1
		call	near ptr proc_11	
		loop	loop_loc_42		; Loop if CX > 0
		jmp	short loc_44		
loc_43:		; N-Ref=1
		repz	stosw			; Repeat if ZF = 1, CX > 0
						; Store AX at ES:DI
loc_44:		; N-Ref=1
		pop	CX			
		sub	CX,BX			
		jns	loc_45			; Jump if no sign ( >= 0)
		sub	CX,CX			
loc_45:		; N-Ref=1
		pop	BX			
		retn				
proc_5		endp



;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
;±
;±		PROCEDURE proc_6
;±
;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±

proc_6		proc	near
		std				; Set direction flag
		neg	CX			
		mov	DX,CX			
		inc	CX			
		or	DI,DI			
		je	loc_51			; Jump if equal ( = )
loop_loc_46:		; N-Ref=1
		push	CX			
		mov	CX,0FFh			
		cmp	CX,DI			
		jl	loc_47			; Jump if less ( < )
		mov	CX,DI			
loc_47:		; N-Ref=1
		repnz	scasb			; Repeat if ZF = 0, CX > 0
						; Scan DS:SI for byte in AL
		jcxz	loc_50			; Jump if CX = 0
		pop	CX			
		loop	loop_loc_46		; Loop if CX > 0
		cmp	Word Ptr DS:data_56,-1	
		jne	loc_48			; Jump if not equal ( != )
		add	DI,+2			
		mov	Word Ptr DS:data_64,DI	
		call	near ptr proc_8		
		retn				
loc_48:		; N-Ref=1
		sub	Word Ptr DS:data_56,DX	
		jnle	loc_49			; Jump if greater ( > )
		mov	Word Ptr DS:data_56,1	
loc_49:		; N-Ref=1
		add	DI,+2			
		mov	Word Ptr DS:data_64,DI	
		retn				
loc_50:		; N-Ref=1
		pop	CX			
		sub	DI,DI			
		mov	Word Ptr DS:data_56,1	
		mov	Word Ptr DS:data_64,DI	
loc_51:		; N-Ref=1
		retn				
proc_6		endp



;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
;±
;±		PROCEDURE proc_7
;±
;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±

proc_7		proc	near
		cld				; Clear direction flag
		mov	DX,CX			
loop_loc_52:		; N-Ref=1
		push	CX			
		mov	CX,0FFh			
		repnz	scasb			; Repeat if ZF = 0, CX > 0
						; Scan DS:SI for byte in AL
		jcxz	loc_53			; Jump if CX = 0
		cmp	DI,Word Ptr DS:data_6c	
		jnb	loc_53			; Jump if not below ( >= )
		pop	CX			
		loop	loop_loc_52		; Loop if CX > 0
		add	Word Ptr DS:data_56,DX	
		mov	Word Ptr DS:data_64,DI	
		retn				
loc_53:		; N-Ref=2
		pop	CX			
		mov	DI,Word Ptr DS:data_64	
		retn				
proc_7		endp



;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
;±
;±		PROCEDURE proc_8
;±
;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±

proc_8		proc	near
		push	DI			
		mov	AL,0Dh			
		mov	Word Ptr DS:data_56,0	
loc_54:		; N-Ref=1
		inc	Word Ptr DS:data_56	
		mov	CX,0FFh			
		cmp	CX,DI			
		jl	loc_55			; Jump if less ( < )
		mov	CX,DI			
loc_55:		; N-Ref=1
		repnz	scasb			; Repeat if ZF = 0, CX > 0
						; Scan DS:SI for byte in AL
		jcxz	loc_56			; Jump if CX = 0
		jmp	short loc_54		
loc_56:		; N-Ref=1
		pop	DI			
		retn				
proc_8		endp



;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
;±
;±		PROCEDURE proc_9
;±
;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±

proc_9		proc	near
		push	BP			
		push	ES			
		mov	AH,12h			
		mov	BL,10h			
		sub	CX,CX			
		int	10h			; BIOS Service func ( ah ) = 12h
						; Screen function
		sub	AX,AX			
		jcxz	loc_57			; Jump if CX = 0
		mov	ES,AX			
		test	Byte Ptr ES:data_487,8	
		jne	loc_57			; Jump if not equal ( != )
		mov	AX,1130h		
		int	10h			; BIOS Service func ( ah ) = 11h
						; Screen function
		mov	AL,DL			
		cbw				; Convert byte to word
loc_57:		; N-Ref=2
		pop	ES			
		pop	BP			
		retn				
proc_9		endp



;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
;±
;±		PROCEDURE proc_10
;±
;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±

proc_10		proc	near
		push	BP			
		mov	BP,SP			
		mov	AX,Word Ptr [BP+6]	
		mov	DI,Word Ptr [BP+4]	
		sub	CX,CX			
		mov	BX,0Ah			
loop_loc_58:		; N-Ref=1
		sub	DX,DX			
		div	BX			; AX=AX_DX/data DX=AX_DX%data
		add	DL,30h			; '0'
		push	DX			
		or	AX,AX			
		loopnz	loop_loc_58		; Loop if ZF = 0, CX > 0
		neg	CX			
		mov	DX,CX			
loop_loc_59:		; N-Ref=1
		pop	AX			
		stosb				; Store AL at ES:DI
		loop	loop_loc_59		; Loop if CX > 0
		mov	AX,DX			
		pop	BP			
		retn	4			
proc_10		endp



;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
;±
;±		PROCEDURE proc_11
;±
;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±

proc_11		proc	near
		push	BX			
		mov	BX,AX			
loc_60:		; N-Ref=1
		in	AL,DX			; Input to AX from port [DX]
		shr	AL,1			; Shift right ( fill zeros )
		jb	loc_60			; Jump if below ( < )
		cli				; Disable interrupts
loc_61:		; N-Ref=1
		in	AL,DX			; Input to AX from port [DX]
		shr	AL,1			; Shift right ( fill zeros )
		jnb	loc_61			; Jump if not below ( >= )
		mov	AX,BX			
		stosw				; Store AX at ES:DI
		sti				; Enable interrupts
		pop	BX			
		retn				
proc_11		endp


CODE_SEG_1	ends


;ÄÄÄÄÄÄÄÄÄÄ DATA_SEG_2  ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

DATA_SEG_2	segment para public
		assume  CS:DATA_SEG_2, DS:DATA_SEG_2, SS:DATA_SEG_2, ES:nothing

		dw	0ABC3h, 5BFBh, 0C3h
var2_6		db	' Line:          File: '
var2_1c		db	16 dup (20h)
		db	'Quit: ESC    Move: '
		db	18h, 20h, 19h
var2_42		db	' PGUP PGDN HOME END '
var2_56		dw	1
var2_58		db	20h
var2_59		db	0
var2_5a		dw	18h
var2_5c		db	0
var2_5d		db	0
var2_5e		db	0
var2_5f		db	1
var2_60		dw	0B800h
var2_62		db	30h
var2_63		db	17h
var2_64		dw	0
var2_66		dw	0
var2_68		dw	0
var2_6a		dw	0
var2_6c		dw	0
var2_6e		db	0Dh, 0Ah, 0Dh, 0Ah
		db	'Enter filename: $'
var2_83		db	0Dh, 0Ah
		db	'File problem. Try again? $'
var2_9f		db	42h
var2_a0		db	0
var2_a1		db	66 dup (0)
var2_e3		db	0Dh, 0Ah
		db	'Must have DOS 2.0 or higher'
		db	0Dh, 0Ah, 24h
var2_103	db	0Dh, 0Ah
		db	'File too big'
		db	0Dh, 0Ah, 24h
var2_114	db	'GHIOPQ'
var2_11a	dw	238h, 24Ch, 254h, 25Eh
		dw	274h, 27Ch, 284h
		dw	4 dup (?)

DATA_SEG_2	ends


;ÄÄÄÄÄÄÄÄÄÄ STACK_SEG_3  ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

STACK_SEG_3	segment stack
		assume  CS:STACK_SEG_3, DS:STACK_SEG_3, SS:DATA_SEG_2, ES:nothing

		db	256 dup (?)

STACK_SEG_3	ends



		end	start

