words/char-skip.asm

Jump to Vocabulary

; ( addr1 n1 c -- addr2 n2 ) String
; R( -- )
; skips leading occurancies in string at addr1/n1 leaving addr2/n2 pointing to the 1st non-c character
VE_CSKIP:
    .db $05, "cskip"
    .dw VE_HEAD
    .set VE_HEAD = VE_CSKIP
XT_CSKIP:
    .dw DO_COLON
PFA_CSKIP:
    .dw XT_TO_R           ; ( -- addr1 n1 )
PFA_CSKIP1:
    .dw XT_DUP            ; ( -- addr' n' n' )
    .dw XT_NOTEQUALZERO
    .dw XT_DOCONDBRANCH   ; ( -- addr' n')
    .dw PFA_CSKIP2
    .dw XT_OVER           ; ( -- addr' n' addr' )
    .dw XT_CFETCH         ; ( -- addr' n' c' )
    .dw XT_R_FETCH        ; ( -- addr' n' c' c )
    .dw XT_EQUAL          ; ( -- addr' n' f )
    .dw XT_DOCONDBRANCH   ; ( -- addr' n')
    .dw PFA_CSKIP2
    .dw XT_DOLITERAL
    .dw 1
    .dw XT_SLASHSTRING
    .dw XT_DOBRANCH
    .dw PFA_CSKIP1
PFA_CSKIP2:
    .dw XT_R_FROM
    .dw XT_DROP           ; ( -- addr2 n2)
    .dw XT_EXIT

Jump to Vocabulary