;
; Ullrich von Bassewitz, 2003-05-05
;
; void* __fastcall__ memchr (const void* p, int c, size_t n);
;

  	.export		_memchr
  	.import		popax, return0
  	.importzp	ptr1, ptr2


.segment "LIBCODE"
.proc   _memchr

        eor     #$FF
       	sta	ptr2
        txa
        eor     #$FF
  	sta    	ptr2+1          ; Save ones complement of n
  	jsr	popax		; get c
  	pha
       	jsr	popax 	     	; get p
       	sta	ptr1
       	stx	ptr1+1

        ldy     #$00
        pla                     ; Get c
        ldx     ptr2            ; Use X as low counter byte

L1:     inx
        beq     L3
L2:     cmp     (ptr1),y
        beq     found
        iny
        bne     L1
        inc     ptr1+1
        bne     L1              ; Branch always

L3:     inc     ptr2+1          ; Bump counter high byte
        bne     L2

; Not found, return NULL

notfound:
        jmp     return0

; Found, return pointer to char

found:  ldx 	ptr1+1		; get high byte of pointer
       	tya 			; low byte offset
       	clc
       	adc 	ptr1
       	bcc 	L9
       	inx
L9:  	rts

.endproc

