REM Start of BASIC! Program WAKELOCK 3 GR.OPEN 255,0,0,0,0,1 PAUSE 500 GR.SCREEN sx,sy sx2=sx/2 sy2=sy/2 LIST.CREATE s,lsel GR.BITMAP.CREATE bmp,sx,sy again=1 DO IF again=1 THEN GR.CLS GR.COLOR 255,0,0,0,1 GR.BITMAP.DRAW gob,bmp,0,0 GR.COLOR 255,128,128,128,1 GR.RECT gob1,0,sy-210,sx/3-2,sy-112 GR.RECT gob2,sx/3+2,sy-210,sx/3*2-2,sy-112 GR.RECT gob3,sx/3*2+2,sy-210,sx,sy-112 GR.RECT gob4,0,sy-108,sx/3-2,sy-12 GR.RECT gob5,sx/3+2,sy-108,sx/3*2-2,sy-12 GR.RECT gob6,sx/3*2+2,sy-108,sx,sy-12 GR.COLOR 255,255,255,255,1 GR.TEXT.SIZE 40 GR.TEXT.TYPEFACE 2,2 GR.TEXT.ALIGN 2 GR.TEXT.DRAW gob1t,sx/6,sy-150,"cancel" GR.TEXT.DRAW gob2t,sx/6*3,sy-150,"parameter" GR.TEXT.DRAW gob3t,sx/6*5,sy-150,"save png" GR.TEXT.DRAW gob4t,sx/6,sy-50,"n + 2" GR.TEXT.DRAW gob5t,sx/6*3,sy-50,"" GR.TEXT.DRAW gob6t,sx/6*5,sy-50,"random" GR.CIRCLE gocur,0,0,0 !gr.hide gob1 !gr.hide gob1t GR.HIDE gob2 GR.HIDE gob2t GR.HIDE gob3 GR.HIDE gob3t GR.HIDE gob4 GR.HIDE gob4t GR.HIDE gob5 GR.HIDE gob5t GR.HIDE gob6 GR.HIDE gob6t a1=0 a2=0 a3=0 a04=RND()*2*PI() a05=RND()*2*PI() a06=RND()*2*PI() a4=a04 a5=a05 a6=a06 r1=INT(sx/INT(RND()*10+5)) t12=ROUND(RND()*10+1,INT(RND()*4)) r2=INT(sx/INT(RND()*10+5)) t23=ROUND(RND()*10+1,INT(RND()*4)) r3=INT(sx2-r1-r2) rdrn=INT(RND()*3) IF rdrn=0 THEN strd=PI()/10 ELSEIF rdrn=1 THEN strd=(PI()/10)/t12 ELSE strd=(PI()/10)/t12/t23 ENDIF gnrn=INT(RND()*3) IF gnrn=0 THEN stgn=PI()/10 ELSEIF gnrn=1 THEN stgn=(PI()/10)/t12 ELSE stgn=(PI()/10)/t12/t23 ENDIF burn=INT(RND()*3) IF burn=0 THEN stbu=PI()/10 ELSEIF burn=1 THEN stbu=(PI()/10)/t12 ELSE stbu=(PI()/10)/t12/t23 ENDIF rdrange=INT(RND()*127) gnrange=INT(RND()*127) burange=INT(RND()*127) rdofs=rdrange+INT(RND()*(127-rdrange)) gnofs=gnrange+INT(RND()*(127-gnrange)) buofs=burange+INT(RND()*(127-burange)) n=50 alpha=31 st=PI()/10 ELSEIF again=2 THEN LIST.CLEAR lsel LIST.ADD lsel,"r1 = "+INT$(r1) LIST.ADD lsel,"t12 = "+STR$(t12) LIST.ADD lsel,"r2 = "+INT$(r2) LIST.ADD lsel,"t23 = "+STR$(t23) LIST.ADD lsel,"r3 = "+INT$(r3) LIST.ADD lsel,"n = "+INT$(n) LIST.ADD lsel,"red from = "+INT$(rdofs-rdrange) LIST.ADD lsel,"red to = "+INT$(rdofs+rdrange) LIST.ADD lsel,"red 012 = "+INT$(rdrn) LIST.ADD lsel,"red angle = "+INT$(TODEGREES(a04)) LIST.ADD lsel,"green from = "+INT$(gnofs-gnrange) LIST.ADD lsel,"green to = "+INT$(gnofs+gnrange) LIST.ADD lsel,"green 012 = "+INT$(gnrn) LIST.ADD lsel,"green angle = "+INT$(TODEGREES(a05)) LIST.ADD lsel,"blue from = "+INT$(buofs-burange) LIST.ADD lsel,"blue to = "+INT$(buofs+burange) LIST.ADD lsel,"blue 012 = "+INT$(burn) LIST.ADD lsel,"blue angle = "+INT$(TODEGREES(a06)) LIST.ADD lsel,"alpha"+INT$(alpha) LIST.ADD lsel,"done" DO DIALOG.SELECT sel,lsel,"select parameter to change" IF sel=1 THEN INPUT "r1",nr1,r1,cancel IF !cancel THEN r1=nr1 LIST.REPLACE lsel,1,"*r1 = "+INT$(r1) ENDIF ELSEIF sel=2 THEN INPUT "t12",nt12,t12,cancel IF !cancel THEN t12=nt12 LIST.REPLACE lsel,2,"*t12 = "+STR$(t12) ENDIF ELSEIF sel=3 THEN INPUT "r2",nr2,r2,cancel IF !cancel THEN r2=nr2 LIST.REPLACE lsel,3,"*r2 = "+INT$(r2) ENDIF ELSEIF sel=4 THEN INPUT "t23",nt23,t23,cancel IF !cancel THEN t23=nt23 LIST.REPLACE lsel,4,"*t23 = "+STR$(t23) ENDIF ELSEIF sel=5 THEN INPUT "r3",nr3,r3,cancel IF !cancel THEN r3=nr3 LIST.REPLACE lsel,5,"*r3 = "+INT$(r3) ENDIF ELSEIF sel=6 THEN INPUT "n",nn,n,cancel IF !cancel THEN n=nn LIST.REPLACE lsel,6,"*n = "+INT$(n) ENDIF ELSEIF sel=7 THEN INPUT "red from",nrdf,rdofs-rdrange,cancel IF !cancel THEN rdt=rdofs+rdrange rdrange=(rdt-nrdf)/2 rdofs=nrdf+rdrange LIST.REPLACE lsel,7,"*red from = "+INT$(rdofs-rdrange) ENDIF ELSEIF sel=8 THEN INPUT "red to",nrdt,rdofs+rdrange,cancel IF !cancel THEN rdf=rdofs-rdrange rdrange=(nrdt-rdf)/2 rdofs=rdf+rdrange LIST.REPLACE lsel,8,"*red to = "+INT$(rdofs+rdrange) ENDIF ELSEIF sel=9 THEN INPUT "red rn",nrdrn,rdrn,cancel IF !cancel THEN rdrn=nrdrn LIST.REPLACE lsel,9,"*red rn = "+INT$(rdrn) ENDIF ELSEIF sel=10 THEN INPUT "red angle",na04,INT(TODEGREES(a04)),cancel IF !cancel THEN a04=TORADIANS(na04) LIST.REPLACE lsel,10,"*red angle = "+INT$(TODEGREES(a04)) ENDIF ELSEIF sel=11 THEN INPUT "green from",ngnf,gnofs-gnrange,cancel IF !cancel THEN gnt=gnofs+gnrange gnrange=(gnt-gndf)/2 gnofs=ngnf+gnrange LIST.REPLACE lsel,11,"*green from = "+INT$(gnofs-gnrange) ENDIF ELSEIF sel=12 THEN INPUT "green to",ngnt,gnofs+gnrange,cancel IF !cancel THEN gnf=gnofs-gnrange gnrange=(ngnt-gnf)/2 gnofs=gnf+gnrange LIST.REPLACE lsel,12,"*green to = "+INT$(gnofs+gnrange) ENDIF ELSEIF sel=13 THEN INPUT "green rn",ngnrn,gnrn,cancel IF !cancel THEN gnrn=gndrn LIST.REPLACE lsel,13,"*green rn = "+INT$(gnrn) ENDIF ELSEIF sel=14 THEN INPUT "green angle",na05,INT(TODEGREES(a05)),cancel IF !cancel THEN a05=TORADIANS(na05) LIST.REPLACE lsel,14,"*green angle = "+INT$(TODEGREES(a05)) ENDIF ELSEIF sel=15 THEN INPUT "blue from",nbuf,buofs-burange,cancel IF !cancel THEN but=buofs+burange burange=(but-nbuf)/2 buofs=nbuf+burange LIST.REPLACE lsel,15,"*blue from = "+INT$(buofs-burange) ENDIF ELSEIF sel=16 THEN INPUT "blue to",nbut,buofs+burange,cancel IF !cancel THEN buf=buofs-burange burange=(nbut-buf)/2 buofs=buf+burange LIST.REPLACE lsel,16,"*blue to = "+INT$(buofs+burange) ENDIF ELSEIF sel=17 THEN INPUT "blue rn",nburn,burn,cancel IF !cancel THEN burn=nburn LIST.REPLACE lsel,17,"*blue rn = "+INT$(burn) ENDIF ELSEIF sel=18 THEN INPUT "blue angle",na06,INT(TODEGREES(a06)),cancel IF !cancel THEN a06=TORADIANS(na06) LIST.REPLACE lsel,18,"*blue angle = "+INT$(TODEGREES(a06)) ENDIF ELSEIF sel=19 THEN INPUT "alpha",nalpha,alpha,cancel IF !cancel THEN alpha=nalpha LIST.REPLACE lsel,19,"*alpha = "+INT$(alpha) ENDIF ELSEIF sel=20 THEN ENDIF UNTIL sel=20 GR.CLS GR.COLOR 255,0,0,0,1 GR.BITMAP.DRAW gob,bmp,0,0 GR.COLOR 255,128,128,128,1 GR.RECT gob1,0,sy-210,sx/3-2,sy-112 GR.RECT gob2,sx/3+2,sy-210,sx/3*2-2,sy-112 GR.RECT gob3,sx/3*2+2,sy-210,sx,sy-112 GR.RECT gob4,0,sy-108,sx/3-2,sy-12 GR.RECT gob5,sx/3+2,sy-108,sx/3*2-2,sy-12 GR.RECT gob6,sx/3*2+2,sy-108,sx,sy-12 GR.COLOR 255,255,255,255,1 GR.TEXT.SIZE 40 GR.TEXT.TYPEFACE 2,2 GR.TEXT.ALIGN 2 GR.TEXT.DRAW gob1t,sx/6,sy-150,"cancel" GR.TEXT.DRAW gob2t,sx/6*3,sy-150,"parameter" GR.TEXT.DRAW gob3t,sx/6*5,sy-150,"save png" GR.TEXT.DRAW gob4t,sx/6,sy-50,"n + 2" GR.TEXT.DRAW gob5t,sx/6*3,sy-50,"" GR.TEXT.DRAW gob6t,sx/6*5,sy-50,"random" GR.CIRCLE gocur,0,0,0 !gr.hide gob1 !gr.hide gob1t GR.HIDE gob2 GR.HIDE gob2t GR.HIDE gob3 GR.HIDE gob3t GR.HIDE gob4 GR.HIDE gob4t GR.HIDE gob5 GR.HIDE gob5t GR.HIDE gob6 GR.HIDE gob6t a1=0 a2=0 a3=0 a4=a04 a5=a05 a6=a06 ELSEIF again=3 THEN n+=2 GR.SHOW gob1 GR.SHOW gob1t GR.HIDE gob2 GR.HIDE gob2t GR.HIDE gob3 GR.HIDE gob3t GR.HIDE gob4 GR.HIDE gob4t GR.HIDE gob5 GR.HIDE gob5t GR.HIDE gob6 GR.HIDE gob6t ENDIF GR.BITMAP.DRAWINTO.START bmp GR.COLOR 255,0,0,0,1 IF again <> 3 THEN GR.RECT vd,0,0,sx,sy ELSE GR.RECT vd,0,0,sx,sy/6 ENDIF GR.COLOR 255,255,255,255,1 GR.TEXT.SIZE 25 GR.TEXT.TYPEFACE 2 GR.TEXT.ALIGN 1 GR.TEXT.DRAW vd,20,30," r1 = "+INT$(r1) GR.TEXT.DRAW vd,20,60,"t12 = "+STR$(t12) GR.TEXT.DRAW vd,20,90," r2 = "+INT$(r2) GR.TEXT.DRAW vd,20,120,"t23 = "+STR$(t23) GR.TEXT.DRAW vd,20,150," r3 = "+INT$(r3) GR.TEXT.DRAW vd,20,180," n = "+INT$(n) GR.TEXT.DRAW vd,sx2+20,30," red: "+INT$(rdofs-rdrange)+"-"+INT$(rdofs+rdrange)+", "+INT$(rdrn)+" a="+INT$(TODEGREES(a04)) GR.TEXT.DRAW vd,sx2+20,60,"green: "+INT$(gnofs-gnrange)+"-"+INT$(gnofs+gnrange)+", "+INT$(gnrn)+" a="+INT$(TODEGREES(a05)) GR.TEXT.DRAW vd,sx2+20,90," blue: "+INT$(buofs-burange)+"-"+INT$(buofs+burange)+", "+INT$(burn)+" a="+INT$(TODEGREES(a06)) GR.TEXT.DRAW vd,sx2+20,120,"alpha: "+INT$(alpha) !GR.TEXT.DRAW vd,sx2+20,150," r3 = "+STR$(r3) !GR.TEXT.DRAW vd,sx2+20,180," n = "+STR$(n) ox=sx2+COS(a1)*r1+COS(a2)*r2 +COS(a3)*r3 oy=sy2+SIN(a1)*r1+SIN(a2)*r2 +SIN(a3)*r3 st12=st/t12 st23=st/t12/t23 DO LET a1+=st LET a2+=st12 LET a3+=st23 LET a4+=strd LET a5+=stgn LET a6+=stbu LET x=sx2+COS(a1)*r1+COS(a2)*r2 +COS(a3)*r3 LET y=sy2+SIN(a1)*r1+SIN(a2)*r2 +SIN(a3)*r3 LET rd=SIN(a4)*rdrange+rdofs LET gn=COS(a5)*gnrange+gnofs LET bu=COS(a6)*burange+buofs GR.COLOR alpha,rd,gn,bu,1 GR.LINE vd,ox,oy,x,y LET ox=x LET oy=y LET c=CLOCK() IF c>(oc+100) THEN LET oc=c GR.TOUCH tt,tx,ty IF tt THEN GR.MODIFY gocur,"x",tx,"y",ty IF GR_COLLISION(gocur,gob1) THEN n=INT(a3/2/PI()) ENDIF ENDIF GR.COLOR 255,0,255,0,1 GR.SET.STROKE 10 GR.LINE vd,0,sy-5,a3/(PI()*n*2)*sx,sy-5 GR.SET.STROKE 0 GR.RENDER ENDIF UNTIL a3>PI()*n*2 GR.BITMAP.DRAWINTO.END !TONE 440,100 GR.HIDE gob1 GR.HIDE gob1t GR.SHOW gob2 GR.SHOW gob2t GR.SHOW gob3 GR.SHOW gob3t GR.SHOW gob4 GR.SHOW gob4t !gr.hide gob5 !gr.hide gob5t GR.SHOW gob6 GR.SHOW gob6t GR.RENDER again=0 DO PAUSE 50 GR.TOUCH tt,tx,ty IF tt THEN GR.MODIFY gocur,"x",tx,"y",ty IF GR_COLLISION(gocur,gob2) THEN !Parameter again=2 DO GR.TOUCH tt,tx,ty UNTIL !tt ELSEIF GR_COLLISION(gocur,gob3) THEN !save png GR.HIDE gob1 GR.HIDE gob1t GR.HIDE gob2 GR.HIDE gob2t GR.HIDE gob3 GR.HIDE gob3t GR.HIDE gob4 GR.HIDE gob4t !gr.hide gob5 !gr.hide gob5t GR.HIDE gob6 GR.HIDE gob6t GR.RENDER FILE.EXISTS dexists,"spiro/" IF !dexists THEN FILE.MKDIR "spiro/" ENDIF nfl=0 DO nfl++ fnam$="spiro/spiro"+USING$(,"%05d",INT(nfl))+".png" FILE.EXISTS fex,fnam$ UNTIL !fex GR.BITMAP.SAVE bmp,fnam$ POPUP "saved as "+fnam$,1 DO GR.TOUCH tt,tx,ty UNTIL !tt GR.HIDE gob1 GR.HIDE gob1t GR.SHOW gob2 GR.SHOW gob2t GR.SHOW gob3 GR.SHOW gob3t GR.SHOW gob4 GR.SHOW gob4t !gr.hide gob5 !gr.hide gob5t GR.SHOW gob6 GR.SHOW gob6t GR.RENDER ELSEIF GR_COLLISION(gocur,gob4) THEN !n + 2 again=3 ELSEIF GR_COLLISION(gocur,gob5) THEN !not used ELSEIF GR_COLLISION(gocur,gob6) THEN !random again=1 DO GR.TOUCH tt,tx,ty UNTIL !tt ENDIF ENDIF UNTIL again UNTIL 0