;
; Ullrich von Bassewitz, 31.05.1998
;
; char* strcat (char* dest, const char* src);
;

       	.export		_strcat
	.import		popax
	.importzp	ptr1, ptr2, tmp3

.segment "LIBCODE"
_strcat:
       	sta	ptr1		; Save src
       	stx	ptr1+1
       	jsr	popax 	  	; Get dest
	sta	ptr2
	stx	ptr2+1
	sta	tmp3  	  	; Remember for function return
	ldy	#0

; find end of dest

sc1:	lda	(ptr2),y
  	beq	sc2
	iny
	bne	sc1
	inc	ptr2+1
	bne	sc1

; end found, get offset in y into pointer

sc2:	tya
	clc
	adc	ptr2
	sta	ptr2
	bcc	sc3
	inc	ptr2+1

; copy src

sc3:	ldy	#0
sc4:	lda	(ptr1),y
	sta	(ptr2),y
	beq	sc5
	iny
	bne	sc4
	inc	ptr1+1
	inc	ptr2+1
	bne	sc4

; done, return pointer to dest

sc5:	lda	tmp3            ; X does still contain high byte
	rts


