PI = 3.141592654
PI2 = 2 * PI
NSEG = 16
COLOR = 4
LOW'X = 1000
LOW'Y = 1000
UP'X = 32300
UP'Y = 24000
RADIUS(1)=0
RADIUS(2)=0
BOUNCE:
PRINT TAB(-1,29);
! XCALL AMGSBR,G'OPWK,GCB,"TK4105",STATUS,"","TERM2"
! OPEN #1,"BOUNCE.LST",OUTPUT
XCALL AMGSBR,G'OPWK,GCB,"",STATUS
WPOINT = 1
ON ERROR GOTO ABORT
!Clear the workstation
XCALL AMGSBR,G'CLRW,GCB,STATUS
!Set workstation viewport
! XCALL AMGSBR,G'SWKV,GCB,18000.,14000.,32000.,25000.
!Set polymarker type
XCALL AMGSBR,G'SPMT,GCB,3,STATUS
! Initialize Color Map
FOR I=1 TO 8
COLOR'INDEX(I)=I-1
XCALL AMGSBR,G'QCR,GCB,COLOR'INDEX(I),HUE(I),LIGHTNESS(I),SATURATION(I),STATUS
! PRINT HUE(I),LIGHTNESS(I),SATURATION(I)
NEXT I
LOOP:
! IF INT(WPOINT/2)=WPOINT/2 THEN CALL ROTATE'COLOR
IF INT(WPOINT/10)=WPOINT/10 THEN COLOR =INT(RND(1)*7)+1
! CALL ROTATE'COLOR
! COLOR=INT(RND(1)*7)+1
P=1
CALL GET'POINT
P=2
CALL GET'POINT
XCALL AMGSBR,G'SPLC,GCB,COLOR,0,STATUS
XCALL AMGSBR,G'PL,GCB,POINT'ARRAY,STATUS
PSEG(WPOINT,1)=POINTS(1)
PSEG(WPOINT,2)=POINTS(2)
IF WPOINT = 150 THEN WPOINT = 1 ELSE WPOINT = WPOINT +1
IF WPOINT = 1 AND RPOINT=-150 THEN RPOINT = 1
IF RPOINT < 0 THEN GOTO LOOP
CLEARS(1)=PSEG(RPOINT,1)
CLEARS(2)=PSEG(RPOINT,2)
XCALL AMGSBR,G'SPLC,GCB,0,STATUS
XCALL AMGSBR,G'PL,GCB,CLEAR'ARRAY,STATUS
IF RPOINT=150 THEN RPOINT =1 ELSE RPOINT=RPOINT+1
GOTO LOOP
ABORT:
XCALL AMGSBR,G'CLWK,GCB,STATUS
END
GET'POINT:
RADIUS(P)=RADIUS(P)+100+(P*20)
Q=(PI2*ANGLE(P)/360)
POINT'X(P+2)=XCENT(P)+RADIUS(P)*COS(Q)
POINT'Y(P+2)=YCENT(P)+RADIUS(P)*SIN(Q)
IF POINT'X(P+2)>UP'X OR POINT'X(P+2)<LOW'X OR &
POINT'Y(P+2)<LOW'Y OR POINT'Y(P+2)>UP'Y THEN GOTO NEW'ANGLE
POINTS(P)=POINTS(P+2)
RETURN
NEW'ANGLE:
ANGLE(P)=ANGLE(P)+1
IF POINT'X(P+2)> LOW'X THEN GOTO SIDE2
IF ANGLE(P)<180 THEN ANGLE(P)=ANGLE(P)-90 ELSE ANGLE(P)=ANGLE(P)+90
GOTO ANG'DONE
SIDE2: IF POINT'Y(P+2)<UP'Y THEN GOTO SIDE3
IF ANGLE(P)<90 THEN THEN ANGLE(P)=360-ANGLE(P) ELSE ANGLE(P)=ANGLE(P)+90
GOTO ANG'DONE
SIDE3: IF POINT'X(P+2)<UP'X THEN GOTO SIDE4
IF ANGLE(P)<180 THEN ANGLE(P)=ANGLE(P)+90 ELSE ANGLE(P)=ANGLE(P)-90
GOTO ANG'DONE
SIDE4: IF ANGLE(P)>270 THEN ANGLE(P)=360-ANGLE(P) ELSE ANGLE(P)=ANGLE(P)-90
ANG'DONE:
IF ANGLE(P)<0 THEN ANGLE(P) = ANGLE(P)+360
IF ANGLE(P) > 360 THEN ANGLE(P) =ANGLE(P)-360
XCENT(P)=POINT'X(P)
YCENT(P)=POINT'Y(P)
RADIUS(P) = 0
GOTO GET'POINT
ROTATE'COLOR:
COLOR'DATA(9)=COLOR'DATA(2)
FOR I = 2 TO 8
COLOR'DATA(I)=COLOR'DATA(I+1)
XCALL AMGSBR,G'SCR,GCB,COLOR'INDEX(I),HUE(I),LIGHTNESS(I),SATURATION(I),STATUS
NEXT I
RETURN