All pastes #421218 Raw Edit

tri-wave

public text v1 · immutable
·published 2007-04-02 18:26 UTC
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