rendered paste body: +field ( n "name" -- ) create over , +
does> ( addr -- addr' ) @ + ;
: field: ( "name" -- ) aligned 1 cells +field ;
\ add n1 to the value at addr, returning the original value.
: increment ( n1 addr -- n2 ) tuck @ tuck + rot ! ;
0
field: wav-inc
field: wav-val
2 cells +field wav-bounds
drop
: flip ( wav -- ) wav-inc dup @ negate swap ! ;
: edge? ( wav -- flag ) dup wav-val @ swap wav-bounds 2@ within 0= ;
: tri-wave ( min max inc -- ) create abs negate , over , , 1+ ,
does> ( -- cur )
dup edge? if dup flip then
dup wav-inc @ swap wav-val increment
;
1 4 1 tri-wave a-wave
\ generates a series: 1 2 3 4 3 2 1 2 3...
\ with repeated calls to a-wave
a-wave .
a-wave .
a-wave .
a-wave .
a-wave .
a-wave .
a-wave .
a-wave .
a-wave .
a-wave .
a-wave .
a-wave .
cr bye