( : ; immediate create does> allot , variable constant array if else then while repeat do loop dup swap pick drop + - * = < > & | ^ ! @ . putpixel redraw 123 i "string" 'c' `javascript` ) 3.14 constant pi 256 constant n n array x n array y variable t : fft ; ( recurse workaround ) : fft dup n < if over 3 pick 2 pick 2 * fft over over + over 4 pick + 2 pick 2 * fft n do 1 + over 2 * - dup n / pi * dup cos swap sin i * - over 3 pick + 4 pick + @ * t ! dup 3 pick + @ t @ + over 2 / 5 pick + ! dup 3 pick + @ t @ - over n + 2 / 5 pick + ! loop then drop drop drop ; variable m : w n / pi * cos ; : f dup dup m @ * n / pi * cos swap 4 * m @ * n / pi * sin 2 / m @ 16 / sin * + swap w * ; : copy n do dup n 2 / - f over over over x + ! y + ! loop ; : bar round do over 2 * over 176 swap - over 1 + over 172 putpixel 128 putpixel loop drop ; : bar2 round dup 0 < if abs do over over 64 swap - 2 pick 4 * 128 + putpixel loop else do over over 65 + 0 putpixel loop then drop ; : calc time 768 / sin 512 * m ! copy x y 1 fft ; : render 256 do 176 do over over 96 putpixel loop loop 256 do dup over 128 - f -32 * bar2 loop 128 do dup dup x + @ abs bar loop redraw ; variable frame : fps `v="fps:";` frame @ . 0 frame ! ; : 1000 fps ; : 0 calc frame @ 1 + frame ! ; : 40 render ;