aboutsummaryrefslogtreecommitdiff
path: root/amforth-6.5/examples/sierpinsi.frt
blob: 19fe9202c336da64701a84f04ef4d5aa92717e7b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
\ Sierpinski fractal
\ richard.w@gmail.com, clf 13.2.2015

\ additional words from the forth lib
\ #require buffer.frt
\ #require blank.frt
\ #require chars.frt

64 constant size
char * constant '*'
size buffer: line[]

line[] size blank   '*' size 2/ chars line[] + c!  ( init )

: .line[] ( -- ) line[] size type cr ;
: =*? ( addr -- f ) c@   '*' = ;
: >char ( f f -- ch ) xor [ '*' bl - ] literal and bl + ;
: init-flags ( -- f-1 f0 )  0  line[] =*? ;
: sierp-line ( -- ) init-flags   line[] size bounds do
       i 1 chars + =*?   rot over >char   i c!
   loop 2drop ;
: sierpinski ( -- ) size 2/ 0 do .line[] sierp-line loop ;

\
\ sierpinski prints the fractal on the terminal
\