++INCLUDE AMGSYM.BSI MAP1 GCB,X,32000 MAP1 POINT'ARRAY MAP2 POINT'COUNT,B,2 MAP2 POINTS(20) MAP3 POINT'X,B,2 MAP3 POINT'Y,B,2 MAP1 CLEAR'ARRAY MAP2 CLEAR'COUNT,B,2 MAP2 CLEARS(20) MAP3 CLEAR'X,B,2 MAP3 CLEAR'Y,B,2 MAP1 STATUS,F !Status returned from AMIGOS calls !Variables specific to this design MAP1 XCENT(2),F MAP1 YCENT(2),F MAP1 RADIUS(2),F MAP1 ANGLE(2),F MAP1 PREVIOUS'LIST MAP2 PSEG(150,2) MAP3 PX,B,2 MAP3 PY,B,2 MAP1 WPOINT,F MAP1 RPOINT,F,6,-150 MAP1 COLOR'MAP(9) MAP2 COLOR'INDEX,F MAP2 COLOR'DATA MAP3 HUE,F MAP3 LIGHTNESS,F MAP3 SATURATION,F XCENT(1)=11000 YCENT(1)=11000 XCENT(2)=1200 YCENT(2)=12500 ANGLE(1)=51 ANGLE(2)=210 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 ! POINT'COUNT = 5 ! POINT'X(1) = LOW'X-100 ! POINT'Y(1) = LOW'Y-100 ! POINT'X(2) = UP'X+100 ! POINT'Y(2) = LOW'Y-100 ! POINT'X(3) = UP'X+100 ! POINT'Y(3) = UP'Y+100 ! POINT'X(4) = LOW'X-100 ! POINT'Y(4) = UP'Y+100 ! POINT'X(5) = LOW'X-100 ! POINT'Y(5) = LOW'Y-100 ! XCALL AMGSBR,G'PL,GCB,POINT'ARRAY,STATUS POINT'COUNT = 2 CLEAR'COUNT=2 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)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)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