From 7a2be16d77bdf274d8f21a0f3590053abb7e49ac Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Tue, 30 Sep 2014 07:01:35 +0200 Subject: [PATCH] Add .frt samples for Forth. --- samples/Forth/bitmap.frt | 8 ++++++++ samples/Forth/enum.frt | 7 +++++++ samples/Forth/macros.frt | 8 ++++++++ 3 files changed, 23 insertions(+) create mode 100644 samples/Forth/bitmap.frt create mode 100644 samples/Forth/enum.frt create mode 100644 samples/Forth/macros.frt diff --git a/samples/Forth/bitmap.frt b/samples/Forth/bitmap.frt new file mode 100644 index 00000000..c3ee6c39 --- /dev/null +++ b/samples/Forth/bitmap.frt @@ -0,0 +1,8 @@ +\ Bit arrays. +: bits ( u1 -- u2 ) 7 + 3 rshift ; +: bitmap ( u "name" -- ) create bits here over erase allot + does> ( u -- a x ) over 3 rshift + 1 rot 7 and lshift ; +: bit@ ( a x -- f ) swap c@ and ; +: 1bit ( a x -- ) over c@ or swap c! ; +: 0bit ( a x -- ) invert over c@ and swap c! ; +: bit! ( f a x -- ) rot if 1bit else 0bit then ; diff --git a/samples/Forth/enum.frt b/samples/Forth/enum.frt new file mode 100644 index 00000000..f7cc30ab --- /dev/null +++ b/samples/Forth/enum.frt @@ -0,0 +1,7 @@ +\ Implements ENUM. + +\ Double DOES>! +: enum create 0 , does> create dup @ 1 rot +! , does> @ ; + +\ But this is simpler. +: enum create 0 , does> dup @ constant 1 swap +! ; diff --git a/samples/Forth/macros.frt b/samples/Forth/macros.frt new file mode 100644 index 00000000..e3a205b7 --- /dev/null +++ b/samples/Forth/macros.frt @@ -0,0 +1,8 @@ +\ Simplifies compiling words. + +: [[ ; immediate +: '<> >in @ ' swap >in ! <> ; +: (]]) begin dup '<> while postpone postpone repeat drop ; +: ]] ['] [[ (]]) ; immediate + +( Usage: : foo ]] dup * [[ ; immediate : bar 42 foo . ; )