From 4744e3602c4f4c5ea213fa10377b64aaa8d45745 Mon Sep 17 00:00:00 2001 From: cuz Date: Fri, 9 Jun 2000 12:07:53 +0000 Subject: [PATCH] Added the capability to search for the terminating zero of the given string. 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 | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/libsrc/common/strchr.s b/libsrc/common/strchr.s index 7a5c767d0..d1761b905 100644 --- a/libsrc/common/strchr.s +++ b/libsrc/common/strchr.s @@ -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