strpbrk.s



;						    
; Ullrich von Bassewitz, 11.06.1998
;
; char* strpbrk (const char* s1, const char* s2);
;

	.export		_strpbrk
	.import		popax, return0
	.importzp	ptr1, ptr2, tmp1, tmp2, tmp3

_strpbrk:
       	jsr    	popax 	  	; get s2
	sta    	ptr2
	stx    	ptr2+1
	jsr    	popax 		; get s1
	sta    	ptr1
	stx    	ptr1+1
	ldy	#$00

L1:	lda	(ptr1),y	; get next char from s1
       	beq    	L9     		; jump if done
	sta	tmp2 		; save char
	iny
	bne	L2
	inc	ptr1+1
L2:	sty	tmp3 		; save index into s1

   	ldy	#0   		; get index into s2
L3:	lda	(ptr2),y	;
   	beq	L4  		; jump if done
   	cmp	tmp2
   	beq	L6
   	iny
   	bne	L3

; The character was not found in s2. Increment the counter and start over

L4:    	ldy	tmp3		; reload index
	inx
   	bne	L1
	inc	tmp1
	bne	L1

; A character was found. Calculate a pointer to this char in s1 and return it.

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






Valid HTML 4.0! strpbrk.s.html; generated on Sat Oct 13 22:41:34 2001 by ca65html
uz@cc65.org