;
; Ullrich von Bassewitz, 31.05.1998
;
; const char* strchr (const char* s, int c);
;

      	.export		_strchr
      	.import		popax
      	.importzp	ptr1, tmp1

.segment "LIBCODE"
_strchr:
       	sta	tmp1		; Save c
       	jsr	popax 		; get s
       	sta	ptr1
       	stx	ptr1+1
       	ldy	#0

Loop: 	lda	(ptr1),y	; Get next char
	beq	EOS		; Jump on end of string
      	cmp	tmp1		; Found?
      	beq	Found		; Jump if yes
       	iny
       	bne	Loop
       	inc	ptr1+1
       	bne	Loop		; Branch always

; End of string. Check if we're searching for the terminating zero

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	Found1
       	inx
Found1:	rts

; Not found, return NULL

NotFound:
	lda	#0
	tax
	rts

