{block 964} ( mandelbrot set) empty :var p :var q :var sum :var limit :var go :var sh 1 go ! 16 limit ! : one 10000000 ; : square dup one */ ; : newx square negate swap square + [ p ] @ + ; : newy [ one 2/ ] */ [ q ] @ + ; : size over square over square + ; : once over over newy push newx pop size ; : in? [ one dup + dup + ] less drop drop ; : few? [ sum ] @ [ limit ] @ less drop drop ; : look once in? if few? if 1 sum +! look ; ] then then drop drop [ sum ] @ ; : depth 0 [ sum ] ! [ q ] ! [ p ] ! 0 0 look ; : s1 1 ? drop if white ; ] then black ; ] : lshift for 2* next ; : s2 limit @ less drop if 15 and 15 or 2* 2* 2* negate $ff + dup 8 lshift dup 8 lshift + + color ; ] then drop black ; : shade [ sh ] @ 1 ? drop if s1 ; ] then s2 ; 966 load 968 load ok h {block 966} ( mandelbrot) :var size :var xc :var yc 50000 size ! 0 xc ! 0 yc ! : go? [ go ] @ 2 and drop ; : warn? [ go ] @ 1 and drop ; : scale [ size ] @ * ; : xo 512 [ size ] @ * negate [ xc ] @ + ; : yo 320 [ size ] @ * negate [ yc ] @ + ; : real scale xo + ; : imag scale yo + ; : dot at 0 1 line ; : plot over real over imag depth shade dot ; : draw 1022 for i 639 for dup i plot next drop next ; : upper 0 0 at green 1024 641 box ; : ?draw go? if upper draw 0 [ go ] ! then ; : lower 0 641 at black 1024 768 box text ; : details 0 680 at [ xc ] @ . [ yc ] @ . [ size ] @ . [ limit ] @ . ; : ok show ?draw lower details warn? if 2 [ go ] ! ; ] then keyboard ; {block 968} ( changes) : g 1 [ go ] ! ; : s 1 [ sh ] +! g ; : more 16 [ limit ] +! ; : less [ limit ] @ -16 + 16 max [ limit ] ! ; : in [ size ] @ 2/ 1 max [ size ] ! ; : out [ size ] @ 2* [ size ] ! ; : +yc [ size ] @ * [ yc ] +! ; : up -160 +yc ; : down 160 +yc ; : +xc size @ * [ xc ] +! ; : right 256 +xc ; : left -256 +xc ; : reset 64 load ; : nul ; : h pad nul nul accept nul g s nul reset left up down right out less more in nul nul nul nul nul nul nul nul nul nul nul nul $2500 , $100050d , $110160c , $72b2303 , 0 , 0 , 0 ,