mirror of
https://github.com/cc65/cc65.git
synced 2025-02-03 07:30:52 +00:00
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
This commit is contained in:
parent
84066d5f1c
commit
4744e3602c
@ -4,9 +4,9 @@
|
|||||||
; const char* strchr (const char* s, int c);
|
; const char* strchr (const char* s, int c);
|
||||||
;
|
;
|
||||||
|
|
||||||
.export _strchr
|
.export _strchr
|
||||||
.import popax
|
.import popax
|
||||||
.importzp ptr1, tmp1
|
.importzp ptr1, tmp1
|
||||||
|
|
||||||
_strchr:
|
_strchr:
|
||||||
sta tmp1 ; Save c
|
sta tmp1 ; Save c
|
||||||
@ -15,27 +15,34 @@ _strchr:
|
|||||||
stx ptr1+1
|
stx ptr1+1
|
||||||
ldy #0
|
ldy #0
|
||||||
|
|
||||||
scloop: lda (ptr1),y ; get next char
|
Loop: lda (ptr1),y ; Get next char
|
||||||
beq strz ; jump if end of string
|
beq EOS ; Jump on end of string
|
||||||
cmp tmp1 ; found?
|
cmp tmp1 ; Found?
|
||||||
beq strf ; jump if yes
|
beq Found ; Jump if yes
|
||||||
iny
|
iny
|
||||||
bne scloop
|
bne Loop
|
||||||
inc ptr1+1
|
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
|
EOS: lda tmp1 ; Get the char we're searching for
|
||||||
tya ; low byte offset
|
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
|
clc
|
||||||
adc ptr1
|
adc ptr1
|
||||||
bcc str1
|
bcc Found1
|
||||||
inx
|
inx
|
||||||
str1: rts
|
Found1: rts
|
||||||
|
|
||||||
; not found, return zero
|
; Not found, return NULL
|
||||||
|
|
||||||
strz: tax ; return 0
|
NotFound:
|
||||||
|
lda #0
|
||||||
|
tax
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user