10
20 DEF PROC_exit MODE 0:CLS:PRINT"Thanks for watching!":END
30 ON ERROR OSCLI"REFRESH ON":IF ERR=17 PROC_exit ELSE MODE 0:CLS:REPORT:PRINT" at line ";ERL:END
40 :
50
60 IF INKEY-256=&83 OR INKEY-256=&84 THEN MODE 4:OSCLI"GSCALE 16" ELSE FOR C%=0 TO 15:COLOUR C%,C%*17,C%*17,C%*17:NEXT
70 VDU 23,1,0;0;0;0;
80
90 FOR demo%=1 TO 5
100 W%=TRUE
110 ON demo% PROC_colours,PROC_fill,PROC_pyramid,PROC_rose,PROC_sphere
120 IF W% W%=INKEY(400)
130 NEXT demo%
140 PROC_exit
150 :
160 DEF PROC_rose
170 VDU 29,768;512;:GCOL0:GCOL143:CLG
180 S%=5:DA=0:R=500
190 REPEAT
200 FOR A%=1 TO S%
210 A0=(A%-.5)/S%*2*PI+DA:A1=A%/S%*2*PI+DA:A2=(A%+.5)/S%*2*PI+DA
220 MOVER*SINA0,R*COSA0:MOVER*SINA1,R*COSA1:PLOT85,R*SINA2,R*COSA2
230 NEXT A%
240 DA=DA+PI/S%:R=R*COS(PI/S%)
250 UNTIL R<96
260 ENDPROC
270 :
280 DEF PROC_fill
290 VDU 29,768;512;:GCOL128:CLG
300 FOR C%=1 TO 3
310 GCOL 15
320 FOR S%=0 TO 32
330 A=S%/16*PI
340 R=60*C%*(3+SIN(A*8))
350 X=R*SIN(A):Y=R*COS(A)
360 IF S%=0 MOVE X,Y ELSE DRAW X,Y
370 NEXT S%
380 NEXT C%
390 GCOL 13:PLOT 133,0,0
400 GCOL 7:PLOT 133,0,220
410 GCOL 2:PLOT 133,0,430
420 ENDPROC
430 :
440 DEF PROC_colours
450 VDU 5
460 FOR Y%=3 TO 0 STEP -1:FOR X%=0 TO 3
470 VDU 29,X%*384;Y%*256;
480 C%=(3-Y%)*4+X%:GCOL C%
490 MOVE0,0:PLOT97,383,255
500 C$=STR$C%
510 VDU 29,X%*384+64+(2-LEN(C$))*64;Y%*256+176;
520 *REFRESH OFF
530 GCOL 0
540 FOR A%=-1 TO 1:FOR B%=-1 TO 1
550 MOVE A%*16,B%*16:PRINTC$;
560 NEXT B%:NEXT A%
570 GCOL 15:MOVE 0,0:PRINTC$;
580 *REFRESH ON
590 NEXT X%:NEXT Y%
600 VDU 4
610 ENDPROC
620 :
630 DEF PROC_sphere
640 VDU 29,768;512;:GCOL 143:CLG
650 FOR C%=15 TO 0 STEP -1
660 GCOL C%
670 s=500*SIN(C%/32*PI)
680 MOVE0,-450:PLOT0,s,s/2:PLOT201,0,0
690 NEXT C%
700 FOR C%=0 TO 15
710 GCOL C%
720 MOVE-C%*5,C%*10:PLOT153,0,450*COS(C%/32*PI)
730 NEXT C%
740 ENDPROC
750 :
760 DEF PROC_pyramid
770 VDU 29,768;512;:GCOL135
780 DIM pyr(6,2)
790 TIME=0
800 *REFRESH OFF
810 REPEAT
820 CLG:R=TIME/200
830 FOR S%=0 TO 3
840 A=S%/3*2*PI+R:pyr(S%,0)=-16*COS(A+1.047)
850 IF pyr(S%,0)<0 pyr(S%,0)=0
860 IF pyr(S%,0)>15 pyr(S%,0)=15
870 pyr(S%,1)=500*SINA:pyr(S%,2)=150*COSA-300
880 NEXT S%
890 pyr(4,0)=0:pyr(5,0)=0:pyr(6,1)=0:D%=0
900 FOR S%=0 TO 2
910 IF pyr(S%,1)<pyr(4,0) pyr(4,0)=pyr(S%,1):pyr(4,1)=pyr(S%,2)
920 IF pyr(S%,1)>pyr(5,0) pyr(5,0)=pyr(S%,1):pyr(5,1)=pyr(S%,2)
930 IF pyr(S%,2)<pyr(6,1) pyr(6,0)=pyr(S%,1):pyr(6,1)=pyr(S%,2)
940 IF pyr(S%,1)>pyr(S%+1,1)D%=D%+1:GCOLpyr(S%,0):MOVE0,400:MOVEpyr(S%,1),pyr(S%,2):PLOT85,pyr(S%+1,1),pyr(S%+1,2)
950 NEXT S%
960 GCOL0
970 MOVE0,400:DRAWpyr(4,0),pyr(4,1)
980 IF D%=2:DRAWpyr(6,0),pyr(6,1)
990 DRAWpyr(5,0),pyr(5,1):DRAW0,400
1000 *REFRESH
1010 UNTIL TIME>1200
1020 *REFRESH ON
1030 W%=FALSE
1040 ENDPROC