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

	.export		_strspn
	.import		popax
	.importzp	ptr1, ptr2, tmp1, tmp2, tmp3

_strspn:
    	sta	ptr2		; Save s2
    	stx	ptr2+1
    	jsr	popax 		; get s1
    	sta	ptr1
    	stx	ptr1+1
    	ldx	#0  		; low counter byte
    	stx	tmp1		; high counter byte
    	ldy	#$00

L1: 	lda	(ptr1),y	; get next char from s1
       	beq    	L6     		; 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    	L6  		; jump if done
    	cmp	tmp2
    	beq	L4
    	iny
    	bne	L3

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

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

; The character was not found, or we reached the end of s1. Return count of
; characters

L6: 	txa	    		; get low counter byte
    	ldx	tmp1		; get high counter byte
    	rts