]> git.sur5r.net Git - cc65/blobdiff - libsrc/common/strpbrk.s
Fixed strpbrk().
[cc65] / libsrc / common / strpbrk.s
index 5d1482913d73f0366f8707de12bb0b8e7c601b18..a7060415e19bbf13f6ec48085ec52cf51154bea1 100644 (file)
@@ -1,60 +1,53 @@
-;                                                   
-; Ullrich von Bassewitz, 11.06.1998
 ;
-; char* strpbrk (const char* s1, const char* s2);
+; 1998-06-11, Ullrich von Bassewitz
+; 2018-05-29, Greg King
+;
+; char* __fastcall__ strpbrk (const char* str, const char* set);
 ;
 
         .export         _strpbrk
-        .import         popax, return0
-        .importzp       ptr1, ptr2, tmp1, tmp2, tmp3
+
+        .import         popax
+        .importzp       ptr1, ptr2, tmp2, tmp3
 
 _strpbrk:
-        jsr     popax           ; get s2
-        sta     ptr2
+        sta     ptr2            ; store set
         stx     ptr2+1
-        jsr     popax           ; get s1
-        sta     ptr1
-        stx     ptr1+1
-        ldy     #$00
+        jsr     popax
+        stx     ptr1+1          ; store str's high byte
+        ldx     #<$0000
+        stx     ptr1
+        tay                     ; use str's low byte as index
 
-L1:     lda     (ptr1),y        ; get next char from s1
+L1:     lda     (ptr1),y        ; get next char from str
         beq     L9              ; jump if done
         sta     tmp2            ; save char
-        iny
-        bne     L2
-        inc     ptr1+1
-L2:     sty     tmp3            ; save index into s1
+        sty     tmp3            ; save index into str
 
-        ldy     #0              ; get index into s2
-L3:     lda     (ptr2),y        ;
+        ldy     #$00
+L3:     lda     (ptr2),y        ; look at each char in set
         beq     L4              ; jump if done
         cmp     tmp2
-        beq     L6
+        beq     L6              ; break out of loops if something found
         iny
         bne     L3
 
-; The character was not found in s2. Increment the counter and start over
+; The character was not found in set. Increment the counter; and start over.
 
 L4:     ldy     tmp3            ; reload index
-        inx
-        bne     L1
-        inc     tmp1
+        iny
         bne     L1
+        inc     ptr1+1
+        bne     L1              ; branch always
 
-; A character was found. Calculate a pointer to this char in s1 and return it.
+; A character was found. Return its str pointer.
 
 L6:     ldx     ptr1+1
-        lda     tmp3            ; get y offset
-        clc
-        adc     ptr1
-        bcc     L7
-        inx
-L7:     rts
-
-; None of the characters in s2 was found - return NULL
-
-L9:     jmp     return0
-
-
+        lda     tmp3            ; get .Y offset
+        rts
 
+; None of the characters in set was found -- return NULL.
 
+L9:     ;ldx     #>$0000        ; (set by prolog)
+        ;lda     #<$0000        ; (set by '\0' at end of str)
+        rts