%%HP: T(3)A(R)F(.);
DIR
  PLOT
    \<< DUP OBJ\-> EVAL
\-> N
      \<< { N 1 }
\->ARRY STO\GS BARPLOT
PICTURE
      \>>
    \>>
  PLOTF
    \<< DUP OBJ\-> EVAL
\-> N
      \<< 1 N 2 /
        START N
ROLL
        NEXT { N 1
} \->ARRY STO\GS
BARPLOT PICTURE
      \>>
    \>>
  ABSV
    \<< OBJ\-> EVAL \-> N
      \<< 1 N
        START N
ROLL ABS
        NEXT N
\->ARRY
      \>>
    \>>
  SAMPLE
    \<< 0 \-> f t t0 t1
n s
      \<< { } t + 'f'
APPLY f = DEFINE t1
t0 - n 1 - / 's'
STO 1 n
        FOR i t0 f
EVAL s 't0' STO+
        NEXT n
\->ARRY
      \>>
    \>>
  SINC
    \<< \-> t
      \<<
        IF t 0 \=/
        THEN t \pi *
DUP SIN SWAP /
        ELSE 1
        END
      \>>
    \>>
  TRI
    \<< \-> t
      \<< t ABS
        IF DUP 1 \<=
        THEN 1 -
NEG
        ELSE DROP 0
        END
      \>>
    \>>
  RECT
    \<< \-> t
      \<< t ABS .5 \<=
      \>>
    \>>
  LIN
    \<< \-> t t0 f0 t1
f1
      \<<
        IF t t0 < t
t1 > OR
        THEN 0
        ELSE f0 t
t1 - * f1 t t0 - *
- t0 t1 - /
        END
      \>>
    \>>
  CLR
    \<< { \GSPAR PPAR
\GSDAT PICT } PURGE
    \>>
  CST { PLOT PLOTF
ABSV SAMPLE SINC
TRI RECT LIN FFT
IFFT C\->R CLR }
END
