]> git.sur5r.net Git - cc65/commitdiff
Added the capability to search for the terminating zero of the given string.
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Fri, 9 Jun 2000 12:07:53 +0000 (12:07 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Fri, 9 Jun 2000 12:07:53 +0000 (12:07 +0000)
Don't know what the standard says about it, but the feature seems reasonable
and other compilers handle it this way.

git-svn-id: svn://svn.cc65.org/cc65/trunk@42 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/common/strchr.s

index 7a5c767d0836fe4efcbd61f62756846bd9a6fa09..d1761b905fc549afd2b86cf43277f895071a9329 100644 (file)
@@ -4,9 +4,9 @@
 ; const char* strchr (const char* s, int c);
 ;
 
-       .export         _strchr
-       .import         popax
-       .importzp       ptr1, tmp1
+       .export         _strchr
+       .import         popax
+       .importzp       ptr1, tmp1
 
 _strchr:
                sta     tmp1            ; Save c
@@ -15,27 +15,34 @@ _strchr:
                stx     ptr1+1
                ldy     #0
 
-scloop:        lda     (ptr1),y        ; get next char
-               beq     strz            ; jump if end of string
-               cmp     tmp1            ; found?
-               beq     strf            ; jump if yes
+Loop:  lda     (ptr1),y        ; Get next char
+       beq     EOS             ; Jump on end of string
+       cmp     tmp1            ; Found?
+       beq     Found           ; Jump if yes
                iny
-               bne     scloop
+               bne     Loop
                inc     ptr1+1
-               bne     scloop          ; jump always
+               bne     Loop            ; Branch always
 
-; found, calculate pointer to c
+; End of string. Check if we're searching for the terminating zero
 
-strf:          ldx     ptr1+1          ; get high byte of pointer
-               tya                     ; low byte offset
+EOS:   lda     tmp1            ; Get the char we're searching for
+       bne     NotFound        ; Jump if not searching for terminator
+
+; Found. Calculate pointer to c.
+
+Found: ldx     ptr1+1          ; Load high byte of pointer
+       tya                     ; Low byte offset          
                clc
                adc     ptr1
-               bcc     str1
+               bcc     Found1
                inx
-str1:          rts
+Found1:        rts
 
-; not found, return zero
+; Not found, return NULL
 
-strz:  tax                     ; return 0
+NotFound:
+       lda     #0
+       tax
        rts