aboutsummaryrefslogtreecommitdiff
path: root/amforth-6.5/common/lib/chains-wordlist.frt
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2017-08-19 12:15:28 +0200
committerDimitri Sokolyuk <demon@dim13.org>2017-08-19 12:15:28 +0200
commit67d25d837ac55f28a366c0a3b262e439a6e75fc3 (patch)
treedf7715c7724c5935ab87c807f3b8b4ef529315e3 /amforth-6.5/common/lib/chains-wordlist.frt
parente0d6784e89dba33226c0edb815bb974486fa7c48 (diff)
Add AmForth
Diffstat (limited to 'amforth-6.5/common/lib/chains-wordlist.frt')
-rw-r--r--amforth-6.5/common/lib/chains-wordlist.frt31
1 files changed, 31 insertions, 0 deletions
diff --git a/amforth-6.5/common/lib/chains-wordlist.frt b/amforth-6.5/common/lib/chains-wordlist.frt
new file mode 100644
index 0000000..f79f117
--- /dev/null
+++ b/amforth-6.5/common/lib/chains-wordlist.frt
@@ -0,0 +1,31 @@
+\ chains: execute a list of XT when calling the
+\ anchor. Elements can be pre- and ap-pended.
+\ no particular stack effect enforcment
+
+\ chain.run ( chainid -- i*x )
+\ chain ( -- chainid ) \ create an unnamed chain
+\ chain: ( "name" -- ) \ create a named chain
+
+\ implementation uses wordlists
+
+\ #require name2interpret.frt
+\ #require quotations.frt
+\ #require builds.frt
+
+\ create an unnamed chain
+: chain wordlist ; \ trivial
+
+: chain.run ( chainid -- i*x )
+ [: name>interpret execute true ;]
+ swap traverse-wordlist
+;
+
+\ create a named chain with an action
+: chain: <builds 0 chain dup , !e does> @i chain.run ;
+\ for MSP430 use instead
+\ : chain: <builds 0 chain dup , ! does> @i chain.run ;
+
+\ get the chainid from its name
+: chain>id ( "name" -- chainid )
+ ' >body @i
+;