; a0 - source estring

	xdef	_DupEStr

_DupEStr	movem.l	d2-d3/a2/a6,-(a7)
	move.l	a0,d3
	moveq	#0,d2
	move.w	(-2,a0),d2
	move.l	d2,d0
	addq.l	#6,d0		; add header and zero byte
	move.l	#$50000,d1	; MEMF_CLEAR|MEMF_REVERSE
	movea.l	$4.w,a6
	jsr	(-198,a6)		; AllocMem
	tst.l	d0
	beq.s	.finish
	addq.l	#4,d0		; shift by header
	movea.l	d0,a0
	movea.l	a0,a1
	movea.l	d3,a2
.loop	move.b	(a2)+,(a1)+
	bne.s	.loop
	suba.l	a0,a1
	move.w	a1,(-4,a0)
.finish	movem.l	(a7)+,d2-d3/a2/a6
	rts
