words/word.asm

Jump to Vocabulary

; ( c -- addr ) Tools
; R( -- )
; skip leading delimiter characters and parses TIB to the next delimiter. copy the word into PAD
VE_WORD:
    .db $04, "word",0
    .dw VE_HEAD
    .set VE_HEAD = VE_WORD
XT_WORD:
    .dw DO_COLON
PFA_WORD:
    .dw XT_TO_R     ; ( -- )
    .dw XT_SOURCE   ; ( -- addr len)
    .dw XT_G_IN     ; ( -- addr len >in)
    .dw XT_FETCH
    .dw XT_SLASHSTRING ; ( -- addr' len' )

    .dw XT_SWAP        ; ( -- len' addr' )
    .dw XT_OVER        ; ( -- len' addr' len')
    .dw XT_R_FETCH     ; ( -- len' addr' len' c)
    .dw XT_CSKIP       ; ( -- len' addr'' len'')
    .dw XT_ROT         ; ( -- addr'' len'' len')
    .dw XT_OVER        ; ( -- addr'' len'' len' len'')
    .dw XT_MINUS       ; ( -- addr'' len'' dlen)
    .dw XT_G_IN        ; ( -- addr'' len'' dlen >in)
    .dw XT_PLUSSTORE   ; ( -- addr'' len'')

    .dw XT_R_FROM      ; ( -- addr'' len'' c)
    .dw XT_CSCAN       ; ( -- addr''' len''')
    .dw XT_DUP         ; ( -- addr''' len''' len''')
    .dw XT_1PLUS       ;
    .dw XT_G_IN
    .dw XT_PLUSSTORE   ; ( -- addr''' len''')
    .dw XT_PAD         ; ( -- addr''' len''' pad)
    .dw XT_OVER        ; ( -- addr''' len''' pad len''')
    .dw XT_OVER        ; ( -- addr''' len''' pad len''' pad)
    .dw XT_CSTORE      ; ( -- addr''' len''' pad)
    .dw XT_1PLUS       ; ( -- addr''' len''' pad+1)
    .dw XT_SWAP        ; ( -- addr''' pad+1 len''')
    .dw XT_CMOVE_G     ; ( --- )
    .dw XT_PAD

    .dw XT_ZERO	       ; append a zero byte. find/icompare _does_ need it
    .dw XT_PAD
    .dw XT_DUP
    .dw XT_CFETCH
    .dw XT_PLUS        ; ( -- pad pad+len )
    .dw XT_1PLUS
    .dw XT_CSTORE
    .dw XT_EXIT

Jump to Vocabulary