( Program 4 )
( miniFORTH - CU Amiga / John Kennedy )
(	Example script to draw lots of lines )
(	 and bounce them around the screen.  )
(	 Like hey, I know it's not fast...   )


( First we declare the variables we'll need )

0 VARIABLE XA
0 VARIABLE XB
0 VARIABLE YA
0 VARIABLE YB
0 VARIABLE DXA
0 VARIABLE DXB
0 VARIABLE DYA
0 VARIABLE DYB

( Now for some words )

: PREPARE
	3 SCREEN_ON ( This is a Hires, interlace screen )
	( try 4 screen_on if you have an AGA machine )
	SCREEN_CLS
	100 XA !	
	100 YA !
	140 XB !
	160 YB !
	2 DXA !
	5 DXB !
	-4 DYA !
	-2 DYB !
;

: STOP
	SCREEN_OFF
;

: DRAWLINE
	1 SCREEN_PEN
	YA @ XA @ SCREEN_MOVE
	YB @ XB @ SCREEN_DRAW
;


: UPDATELINE

	( Update the X and Y points of the start and end )
	( points of the line. If the edge of the screen  )
	( is reached, make the line bounce. )

	XA @ DXA @ + XA !
	XA @ 0= IF DXA @ NEGATE DXA ! THEN

	XA @ DXA @ + XA !
	XA @ 640 = IF DXA @ NEGATE DXA ! THEN

	YA @ DYA @ + YA !
	YA @ 0= IF DYA @ NEGATE DYA ! THEN

	YA @ DYA @ + YA !
	YA @ 512 = IF DYA @ NEGATE DYA ! THEN

	XB @ DXB @ + XB !
	XB @ 0< IF DXB @ NEGATE DXB ! THEN

	XB @ DXB @ + XB !
	XB @ 640 = IF DXB @ NEGATE DXB ! THEN

	YB @ DYB @ + YB !
	YB @ 0< IF DYB @ NEGATE DYB ! THEN

	YB @ DYB @ + YB !
	YB @ 512 = IF DYB @ NEGATE DYB ! THEN
		
;



: GO

	( This word will start our program )

	PREPARE
	20 0 DO
		DRAWLINE
		UPDATELINE
	LOOP
	STOP
;

( Start the program by calling the main )
( word right now )

GO

END
