www.pudn.com > tp60src.zip > EXTCONV.ASM


	model	large extend_text,pascal 
	include	extend.inc 
 
	.code	Extend_Text 
 
	Argm	Num,dword,1 
	Entry	Round23 
	push	si 
	push	ds 
	lds	si,Num 
	mov	ax,[si+4] 
	mov	dx,[si+6] 
	cmp	word ptr [si],0 
	jne	@@1 
	cmp	word ptr [si+2],0 
	jne	@@1 
	test	al,7fh 
	jnz	@@1 
	test	ah,1 
	jz	@@2 
@@1:	add	al,al 
	adc	ah,0 
	adc	dx,0 
	jnc	@@2 
	rcr	dx,1 
	rcr	ax,1 
	inc	word ptr [si+8] 
	mov	bx,7fffh 
	and	bx,[si+8] 
	inc	bx 
	jo	@@3 
@@2:	mov	al,0 
	sub	bx,bx 
	mov	[si],bx 
	mov	[si+2],bx 
	mov	[si+4],ax 
	mov	[si+6],dx 
	pop	ds 
	jmp	short @@4 
@@3:	sub	ax,ax 
	mov	dx,8000h 
	jmp	@@2 
@@4:	pop	si 
	Exit 
 
	Argm	Src,dword,1 
	Argm	Dst,dword,1 
	Loc	Temp,word,5 
	Entry	Ext2Single 
	push	si di 
	push	ds 
	lds	si,Src 
	lea	di,Temp 
	push	ss 
	pop	es 
	mov	cx,5 
	cld 
	rep	movsw 
	pop	ds 
	push	ss 
	lea	ax,Temp 
	push	ax 
	call	Round23 
	mov	bx,Temp[8] 
	mov	cl,0 
	shl	bx,1 
	rcl	cl,1 
	shr	bx,1 
	cmp	bx,7fffh 
	je	@@2 
	add	bx,0c080h 
	jle	@@4 
	cmp	bx,0ffh 
	jge	@@3 
	mov	bh,byte ptr Temp[7] 
	mov	ax,Temp[5] 
	xchg	bh,bl 
	shl	bl,1 
@@1:	shr	cl,1 
	rcr	bx,1 
	les	di,Dst 
	cld 
	stosw 
	xchg	ax,bx 
	stosw 
	jmp	short @@5 
@@2:	mov	bl,byte ptr Temp[7] 
	shl	bl,1 
	mov	bh,-1 
	sub	ax,ax 
	jmp	@@1 
@@3:	mov	bx,0ff00h 
	sub	ax,ax 
	jmp	@@1 
@@4:	sub	bx,bx 
	sub	ax,ax 
	jmp	@@1 
@@5:	pop	di si 
	Exit 
 
	Argm	Num,dword,1 
	Entry	Round52 
	push	si di 
	push	ds 
	lds	si,Num 
	mov	ax,[si+1] 
	mov	dh,3 
	and	dh,al 
	or	dh,[si] 
	jnz	@@1 
	test	al,8 
	jz	@@2 
@@1:	add	ax,4 
	jnc	@@2 
	sub	bx,bx 
	adc	[si+3],bx 
	adc	[si+5],bx 
	adc	[si+7],bl 
	jnc	@@2 
	inc	word ptr [si+8] 
	mov	di,7fffh 
	and	di,[si+8] 
	inc	di 
	jo	@@4 
@@2:	and	al,0f8h 
	mov	byte ptr [si],0 
	mov	[si+1],ax 
@@3:	pop	ds 
	jmp	short @@5 
@@4:	mov	[si],bx 
	mov	[si+2],bx 
	mov	[si+4],bx 
	mov	word ptr [si+6],8000h 
	jmp	@@3 
@@5:	pop	di si 
	Exit 
 
	Argm	Src,dword,1 
	Argm	Dst,dword,1 
	Loc	Temp,word,5 
	Entry	Ext2Double 
	push	si di 
	push	ds 
	lds	si,Src 
	lea	di,Temp 
	push	ss 
	pop	es 
	mov	cx,5 
	cld 
	rep	movsw 
	pop	ds 
	push	ss 
	lea	ax,Temp 
	push	ax 
	call	Round52 
	mov	ax,Temp[1] 
	mov	di,Temp[3] 
	mov	cx,Temp[5] 
	mov	dl,byte ptr Temp[7] 
	mov	bx,Temp[8] 
	and	bx,7fffh 
	cmp	bx,7fffh 
	je	@@3 
	add	bx,0c400h 
	jle	@@2 
	cmp	bx,7ffh 
	jge	@@4 
	shl	dl,1 
	shr	bx,1 
	rcr	dl,1 
	or	al,bh 
	mov	dh,bl 
	mov	bx,di 
	shr	di,1 
	rcr	ax,1 
	rcr	dx,1 
	rcr	cx,1 
	rcr	bx,1 
	shr	di,1 
	rcr	ax,1 
	rcr	dx,1 
	rcr	cx,1 
	rcr	bx,1 
	shl	Temp[8],1 
	adc	al,0 
	shr	di,1 
	rcr	ax,1 
	rcr	dx,1 
	rcr	cx,1 
	rcr	bx,1 
@@1:	les	di,Dst 
	cld 
	stosw 
	xchg	ax,bx 
	stosw 
	xchg	ax,cx 
	stosw 
	xchg	ax,dx 
	stosw 
	jmp	short @@6 
@@2:	mov	dx,0 
	jmp	short @@5 
@@3:	and	dx,7fh 
	shr	dx,1 
	shr	dx,1 
	or	dx,0ffe0h 
	jmp	short @@5 
@@4:	mov	dx,0ffe0h 
@@5:	shl	temp[8],1 
	rcr	dx,1 
	sub	cx,cx 
	mov	bx,cx 
	mov	ax,cx 
	jmp	@@1 
@@6:	pop	di si 
	Exit 
 
	Argm	Src,dword,1 
	Argm	Dst,dword,1 
	Entry	Single2Ext 
	push	si di 
	cld 
	les	si,Src 
	mov	ax,es:[si] 
	mov	dx,es:[si+2] 
	sub	si,si 
	shl	dx,1 
	rcr	si,1 
	sub	bx,bx 
	add	bl,dh 
	jz	@@4 
	cmp	dh,-1 
	je	@@3 
	sub	bx,7fh 
	stc 
@@1:	rcr	dl,1 
@@2:	mov	dh,dl 
	mov	dl,ah 
	mov	ch,al 
	mov	cl,0 
	les	di,Dst 
	sub	ax,ax 
	stosw 
	stosw 
	xchg	ax,cx 
	stosw 
	xchg	ax,dx 
	stosw 
	xchg	ax,bx 
	add	ax,3fffh 
	or	ax,si 
	stosw 
	jmp	short @@7 
@@3:	mov	bx,ax 
	or	bl,dl 
	neg	bx 
	mov	bx,4000h 
	jmp	@@1 
@@4:	mov	cx,dx 
	or	cx,ax 
	jz	@@6 
	sub	bx,7fh 
	shr	dl,1 
@@5:	add	ax,ax 
	adc	dl,dl 
	js	@@2 
	dec	bx 
	jmp	@@5 
@@6:	mov	bx,0c001h 
	jmp	@@2 
@@7:	pop	di si 
	Exit 
 
	Argm	Src,dword,1 
	Argm	Dst,dword,1 
	Entry	Double2Ext 
	push	si di 
	push	ds 
	lds	si,Src 
	les	di,Dst 
	mov	dx,[si+6] 
	sub	ax,ax 
	shl	dx,1 
	rcr	ax,1 
	std 
	lea	di,[di+8] 
	mov	es:[di],ax 
	mov	cl,5 
	shr	dx,cl 
	jz	@@4 
	cmp	dx,7ffh 
	je	@@3 
	mov	bl,10h 
	sub	dx,3ffh 
@@1:	xchg	ax,dx 
	add	ax,3fffh 
	or	ax,es:[di] 
	stosw 
	mov	dx,[si+5] 
	and	dh,0fh 
	or	dh,bl 
	mov	cx,[si+3] 
	mov	bx,[si+1] 
	mov	ah,[si] 
	mov	al,0 
	shl	ax,1 
	rcl	bx,1 
	rcl	cx,1 
	rcl	dx,1 
	shl	ax,1 
	rcl	bx,1 
	rcl	cx,1 
	rcl	dx,1 
	shl	ax,1 
	rcl	bx,1 
	rcl	cx,1 
	rcl	dx,1 
@@2:	xchg	ax,dx 
	stosw 
	xchg	ax,cx 
	stosw 
	xchg	ax,bx 
	stosw 
	xchg	ax,dx 
	stosw 
	pop	ds 
	jmp	@@7 
@@3:	mov	bl,[si+6] 
	and	bx,0fh 
	or	bx,[si+4] 
	or	bx,[si+2] 
	or	bx,[si] 
	mov	dx,4000h 
	jz	@@1 
	mov	bl,10h 
	jmp	@@1 
@@4:	mov	bl,[si+6] 
	and	bx,0fh 
	or	bx,[si+4] 
	or	bx,[si+2] 
	or	bx,[si] 
	jnz	@@5 
	mov	dx,0c001h 
	jmp	@@1 
@@5:	mov	dx,[si+5] 
	and	dh,0fh 
	mov	cx,[si+3] 
	mov	bx,[si+1] 
	mov	ah,[si] 
	mov	al,4 
@@6:	dec	al 
	shl	ah,1 
	rcl	bx,1 
	rcl	cx,1 
	adc	dx,dx 
	jns	@@6 
	push	ax 
	cbw 
	add	ax,3c00h 
	or	ax,es:[di] 
	stosw 
	pop	ax 
	mov	al,0 
	jmp	@@2 
@@7:	pop	di si 
	Exit 
 
	Argm	Src,dword,1 
	Argm	Dst,dword,1 
	Entry	Comp2Ext 
	push	si di 
	push	ds 
	lds	si,Src 
	mov	ax,[si] 
	mov	bx,[si+2] 
	mov	cx,[si+4] 
	mov	dx,[si+6] 
	pop	ds 
	mov	di,0 
	or	dx,dx 
	jl	@@1 
	jg	@@2 
	or	cx,cx 
	jnz	@@2 
	or	bx,bx 
	jnz	@@2 
	or	ax,ax 
	jnz	@@2 
	sub	si,si 
	jmp	short @@7 
@@1:	not	dx 
	not	cx 
	not	bx 
	neg	ax 
	cmc 
	adc	bx,0 
	adc	cx,0 
	adc	dx,0 
	mov	di,1 
@@2:	mov	si,64 
@@3:	or	dx,dx 
	jnz	@@4 
	xchg	dx,cx 
	xchg	cx,bx 
	xchg	bx,ax 
	sub	si,16 
	jmp	@@3 
@@4:	js	@@6 
@@5:	dec	si 
	add	ax,ax 
	adc	bx,bx 
	adc	cx,cx 
	adc	dx,dx 
	jns	@@5 
@@6:	add	si,3ffeh 
	shl	si,1 
	or	si,di 
	ror	si,1 
@@7:	les	di,Dst 
	cld 
	stosw 
	xchg	ax,bx 
	stosw 
	xchg	ax,cx 
	stosw 
	xchg	ax,dx 
	stosw 
	xchg	ax,si 
	stosw 
	pop	di si 
	Exit 
 
	Argm	Src,dword,1 
	Argm	Dst,dword,1 
	Entry	Ext2Comp 
	push	si di 
	push	ds 
	lds	si,Src 
	mov	di,7fffh 
	and	di,[si+8] 
	sub	di,3ffeh 
	cmp	di,63 
	jg	@@1 
	or	di,di 
	jge	@@3 
	sub	dx,dx 
	jmp	short @@2 
@@1:	mov	dx,8000h 
@@2:	sub	ax,ax 
	mov	bx,ax 
	mov	cx,ax 
	jmp	short @@8 
@@3:	mov	dx,[si+6] 
	mov	cx,[si+4] 
	mov	bx,[si+2] 
	mov	ax,[si] 
	sub	di,48 
	ja	@@5 
@@4:	mov	ax,bx 
	mov	bx,cx 
	mov	cx,dx 
	sub	dx,dx 
	add	di,16 
	jle	@@4 
	and	di,0fh 
@@5:	neg	di 
	jz	@@7 
	add	di,16 
@@6:	shr	dx,1 
	rcr	cx,1 
	rcr	bx,1 
	rcr	ax,1 
	dec	di 
	jg	@@6 
@@7:	test	byte ptr [si+9],80h 
	jz	@@8 
	sub	si,si 
	not	dx 
	not	cx 
	not	bx 
	neg	ax 
	cmc 
	adc	bx,si 
	adc	cx,si 
	adc	dx,si 
@@8:	les	di,Dst 
	cld 
	stosw 
	xchg	ax,bx 
	stosw 
	xchg	ax,cx 
	stosw 
	xchg	ax,dx 
	stosw 
	sub	di,8 
	pop	ds 
	pop	di si 
	Exit 
 
	Argm	Src,dword,1 
	Loc	Temp,word,4 
	Entry	Ext2Long 
	push	Src ss 
	lea	ax,Temp 
	push	ax 
	call	Ext2Comp 
	mov	ax,Temp[2] 
	cwd 
	cmp	dx,Temp[4] 
	jne	@@1 
	cmp	dx,Temp[6] 
	jne	@@1 
	xchg	ax,dx 
	mov	ax,Temp[0] 
	jmp	short @@2 
@@1:	sub	ax,ax 
	mov	dx,8000h 
@@2:	Exit 
 
	Argm	Dst,dword,1 
	Loc	Temp,word,4 
	Entry	Ext2Ulong 
	push	Dst ss 
	lea	ax,Temp 
	push	ax 
	call	Ext2Comp 
	mov	ax,Temp[0] 
	mov	dx,Temp[2] 
	mov	cx,Temp[4] 
	or	cx,Temp[6] 
	jz	@@1 
	mov	ax,-1 
	mov	dx,ax 
@@1:	Exit 
 
	Argm	Src,dword,1 
	Argm	Dst,dword,1 
	Loc	Temp,word,4 
	Entry	Long2Ext 
	mov	ax,word ptr Src[0] 
	mov	Temp[0],ax 
	mov	ax,word ptr Src[2] 
	mov	Temp[2],ax 
	cwd 
	mov	Temp[4],dx 
	mov	Temp[6],dx 
	push	ss 
	lea	ax,Temp 
	push	ax 
	push	Dst 
	call	Comp2Ext 
	Exit 
 
	Argm	Src,dword,1 
	Argm	Dst,dword,1 
	Loc	Temp,word,4 
	Entry	Ulong2Ext 
	mov	ax,word ptr Src[0] 
	mov	Temp[0],ax 
	mov	ax,word ptr Src[2] 
	mov	Temp[2],ax 
	sub	ax,ax 
	mov	Temp[4],ax 
	mov	Temp[6],ax 
	push	ss 
	lea	ax,Temp 
	push	ax 
	push	Dst 
	call	Comp2Ext 
	Exit 
 
	Argm	Src,dword,1 
	Argm	Dst,dword,1 
	Entry	Real2Ext 
	push	si di 
	les	di,Src 
	mov	dx,es:[di] 
	sub	bx,bx 
	or	dl,dl 
	jnz	@@1 
	mov	si,bx 
	mov	cx,bx 
	mov	dx,bx 
	jmp	short @@2 
@@1:	mov	si,es:[di+2] 
	mov	cx,es:[di+4] 
	mov	bh,dh 
	mov	dh,ch 
	and	dh,80h 
	add	dx,3f7eh 
	or	ch,80h 
@@2:	les	di,Dst 
	cld 
	sub	ax,ax 
	stosw 
	xchg	ax,bx 
	stosw 
	xchg	ax,si 
	stosw 
	xchg	ax,cx 
	stosw 
	xchg	ax,dx 
	stosw 
	pop	di si 
	Exit 
 
	Argm	Src,dword,1 
	Argm	Dst,dword,1 
	Entry	Ext2Real 
	push	si di 
	push	ds 
	lds	si,Src 
	cld 
	lodsw 
	lodsw 
	xchg	ax,bx 
	lodsw 
	xchg	ax,cx 
	lodsw 
	xchg	ax,dx 
	lodsw 
	pop	ds 
	mov	di,ax 
	and	ax,7fffh 
	sub	ax,3f7eh 
	jbe	@@2 
	or	ah,ah 
	jnz	@@1 
	mov	ah,bh 
	shl	bl,1 
	adc	ah,0 
	adc	cx,0 
	adc	dx,0 
	jnc	@@4 
	inc	al 
	jnz	@@4 
@@1:	mov	ax,-1 
	jmp	short @@3 
@@2:	sub	ax,ax 
@@3:	mov	cx,ax 
	mov	dx,ax 
	jmp	short @@5 
@@4:	shl	dx,1 
	shl	di,1 
	rcr	dx,1 
@@5:	les	di,Dst 
	stosw 
	xchg	ax,cx 
	stosw 
	xchg	ax,dx 
	stosw 
	pop	di si 
	Exit 
 
	end