;
; Ullrich von Bassewitz, 31.05.1998
; Christian Krueger: 2013-Jul-24, minor optimizations
;
; char* strcat (char* dest, const char* src);
;

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

_strcat:
        sta ptr1        ; Save src
        stx ptr1+1
        jsr popax       ; Get dest
        sta tmp3        ; Remember for function return
        tay
.if (.cpu .bitand ::CPU_ISET_65SC02)
        stz ptr2
.else
        lda #0
        sta ptr2        ; access from page start, y contains low byte
.endif
        stx ptr2+1

findEndOfDest:
        lda (ptr2),y
        beq endOfDestFound
        iny
        bne findEndOfDest
        inc ptr2+1
        bne findEndOfDest

endOfDestFound:
        sty ptr2        ; advance pointer to last y position
        ldy #0          ; reset new y-offset

copyByte:
        lda (ptr1),y
        sta (ptr2),y
        beq done
        iny
        bne copyByte
        inc ptr1+1
        inc ptr2+1
        bne copyByte    ; like bra here

; return pointer to dest
done:   lda tmp3        ; X does still contain high byte
        rts
