From 67d25d837ac55f28a366c0a3b262e439a6e75fc3 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sat, 19 Aug 2017 12:15:28 +0200 Subject: Add AmForth --- amforth-6.5/common/words/traverse-wordlist.asm | 49 ++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 amforth-6.5/common/words/traverse-wordlist.asm (limited to 'amforth-6.5/common/words/traverse-wordlist.asm') diff --git a/amforth-6.5/common/words/traverse-wordlist.asm b/amforth-6.5/common/words/traverse-wordlist.asm new file mode 100644 index 0000000..b6c00e0 --- /dev/null +++ b/amforth-6.5/common/words/traverse-wordlist.asm @@ -0,0 +1,49 @@ +; ( i*x xt wid -- j*x ) +; Tools Ext (2012) +; call the xt for every member of the wordlist wid until xt returns false + +.if cpu_msp430==1 + HEADER(XT_TRAVERSEWORDLIST,17,"traverse-wordlist",DOCOLON) +.endif + +.if cpu_avr8==1 +VE_TRAVERSEWORDLIST: + .dw $ff11 + .db "traverse-wordlist",0 + .dw VE_HEAD + .set VE_HEAD = VE_TRAVERSEWORDLIST +XT_TRAVERSEWORDLIST: + .dw DO_COLON +PFA_TRAVERSEWORDLIST: + +.endif + .dw XT_FETCHE +PFA_TRAVERSEWORDLIST1: + .dw XT_DUP ; ( -- xt nt nt ) + .dw XT_DOCONDBRANCH ; ( -- nt ) is nfa = counted string + DEST(PFA_TRAVERSEWORDLIST2) + .dw XT_2DUP + .dw XT_2TO_R + .dw XT_SWAP + .dw XT_EXECUTE + .dw XT_2R_FROM + .dw XT_ROT + .dw XT_DOCONDBRANCH + DEST(PFA_TRAVERSEWORDLIST2) + .dw XT_NFA2LFA + .dw XT_FETCHI + .dw XT_DOBRANCH ; ( -- addr ) + DEST(PFA_TRAVERSEWORDLIST1) ; ( -- addr ) +PFA_TRAVERSEWORDLIST2: + .dw XT_2DROP + .dw XT_EXIT + +; : traverse-wordlist ( i*x xt wid -- i*x' ) +; begin @ dup +; while +; 2dup 2>r +; swap execute ( i*x nt -- i*x' f ) +; 2r> rot +; while +; nfa>lfa @i +; repeat then 2drop ; -- cgit v1.2.3