%%HP: T(3)A(R)F(.);
@ @ @  GENERATOR SIGNALU
@ List ENVGNRT(Prog function);
@ List ENVGNRT(List args);
\<<
  ENVNORM		@	{args}
  OBJ\->			@	4.	"WE"	2.	64.	\<< \>>
  DROP			@	"WE"	2.	64.	\<< \>>
@ Priznak "N"
  IF
    DUP			@	"WE"	"WE"	2.	64.	\<< \>>
    "N"			@	"N"	"WE"	"WE"	2.	64.	\<< \>>
    POS			@	0.|1.	"WE"	2.	64.	\<< \>>
  THEN			@	"WE"	2.	64.	\<< \>>
@ Bez prepoctu nezavisle promenne na radiany
    1.			@	1.	"WE"	2.	64.	\<< \>>
  ELSE			@	"WE"	2.	64.	\<< \>>
@ S prepoctem
    PICK3		@	64.	"WE"	2.	64.	\<< \>>
    \pi			@	\pi	64.	"WE"	2.	64.	\<< \>>
    /			@	64/\pi	"WE"	2.	64.	\<< \>>
    2.			@	2.	64/\pi	"WE"	2.	64.	\<< \>>
    /			@	64/2\pi	"WE"	2.	64.	\<< \>>
    INV			@	2\pi/64	"WE"	2.	64.	\<< \>>
    \->NUM		@	10.1859	"WE"	2.	64.	\<< \>>
  END
@ Priznak "P"
  SWAP			@	"WE"	10.1859	2.	64.	\<< \>>
  "P"			@	"P"	"WE"	10.1859	2.	64.	\<< \>>
  POS			@	paste	10.1859	2.	64.	\<< \>>
  0.			@	vidx	paste	factor	repeat	period	func
  \-> func period repeat factor paste vidx
  \<<
    period		@	64.
    'repeat'		@	'repe	64.
    STO*
    0.			@	0.
    repeat		@	128.	0.
    1.			@	1.	128.	0.
    -			@	127.	0.
@ Vypoctene vzorky signalu jsou ponechavany na stacku...
    START
      factor		@	10.1859
      vidx		@	0.	10.1859
      *			@	xval
      func EVAL		@	yval
      'vidx'		@	'vidx'	yval
      INCR		@	1.	yval
      IF
        paste		@	1.	1.	yval
      THEN		@	1.	yval
        IF
          period	@	64.	1.	yval
          \>=		@	0.	yval
        THEN		@	yval
          0.		@	0.	yval
          'vidx'	@	'vidx'	0.	yval
          STO		@	yval
        END
      ELSE
        DROP		@	yval
      END
    NEXT		@	y[128]	y[127]	...	y[1]
@ ...jsou-li vsechny, ulozi se do objektu List
    repeat		@	128.	y[128]	y[127]	...	y[1]
    \->LIST		@	{yval}
  \>>
\>>
