]> git.sur5r.net Git - cc65/blob - libsrc/common/strcat.s
7784d89f762bc42be2577a4393976bad49c4c7d4
[cc65] / libsrc / common / strcat.s
1 ;
2 ; Ullrich von Bassewitz, 31.05.1998
3 ;
4 ; char* strcat (char* dest, const char* src);
5 ;
6
7         .export         _strcat
8         .import         popax
9         .importzp       ptr1, ptr2, tmp3
10
11 _strcat:
12         sta     ptr1            ; Save src
13         stx     ptr1+1
14         jsr     popax           ; Get dest
15         sta     ptr2
16         stx     ptr2+1
17         sta     tmp3            ; Remember for function return
18         ldy     #0
19
20 ; find end of dest
21
22 sc1:    lda     (ptr2),y
23         beq     sc2
24         iny
25         bne     sc1
26         inc     ptr2+1
27         bne     sc1
28
29 ; end found, get offset in y into pointer
30
31 sc2:    tya
32         clc
33         adc     ptr2
34         sta     ptr2
35         bcc     sc3
36         inc     ptr2+1
37
38 ; copy src
39
40 sc3:    ldy     #0
41 sc4:    lda     (ptr1),y
42         sta     (ptr2),y
43         beq     sc5
44         iny
45         bne     sc4
46         inc     ptr1+1
47         inc     ptr2+1
48         bne     sc4
49
50 ; done, return pointer to dest
51
52 sc5:    lda     tmp3            ; X does still contain high byte
53         rts
54
55