( DFT_plot)

1 VARIABLE yscale  ( to fit graph to vertical space)
1 VARIABLE ymax      ( ABS max Y range of plot)

500 VARIABLE Lx        ( max X-axis size in screen coords)

: max_wvf  -10000 FINT npts @ 0 DO I waveform  @ FABS FMAX LOOP ymax ! ;
: max_f(x) -10000 FINT npts @ 0 DO I DFT->f(x) @ FABS FMAX LOOP ymax ! ;
: max_Cn   -10000 FINT npts @ 0 DO I rd_Cn ROT SWAP FABS FMAX SWAP FABS FMAX LOOP ymax ! ;
: ymag  Y_window FINT ymax @ F/ ;

: doplot                 ( val,xscr0,yscr0 ...)
   ROT                   ( xscr0,yscr0,yval ...)
   SWAP DUP FLOAT        ( xscr0,yval,yscr0,yscr0f .. .)
   ROT F+ FIX            ( xscr0,yscr0,yscr ...)
   3 PICK SWAP           ( xscr0,yscr0,xscr0,yscr ...)
   LINE ;

: plot_real  max_wvf 
     npts @ 0 DO 
      I waveform @ ymag F* I 10 * X0 + Y4 doplot
     LOOP  ;

: plot->f(x) max_f(x) 255 0 0 use_colour
      npts @ 0 DO
       I DFT->f(x) @ ymag F* I 10 * X0 + Y1 doplot
      LOOP  ;

( now for complex array Cn)
: plot_complex max_Cn
    npts @ 0 DO  I rd_Cn ymag                     ( a,b,scaling factor ...)
                 DUP >R F* SWAP R> F* SWAP        ( a,b ...) ( scaled for window)
                 I 10 * X0 +                      ( a,b,xscr0 ...)
                 2DUP Y2 doplot                   ( a,b,xscr0 ...)
                 SWAP DROP                        ( a,xscr0 .....)
                 Y3 doplot
               LOOP ;

: plot_all  plot_real plot_complex plot->f(x) ;
