100 ; REM PROG NAME IS 'C0GRDEMO' 17 JUN '87
110 ;
120 CLS:PEEK $FFFA01,C%:IF C%<128 THEN PRINT " NOT A COLOR SYSTEM":END
130 C%=0:MODE 0:VTAB 4:PRINT " THIS IS A COLOR (MODE 0) GRAPHICS DEMONSTRATION PROGRAM.  ENTER THE NUMBER"
140 PRINT " CORRESPONDING TO YOUR CHOICE TO START A PARTICULAR DEMO.  TO STOP A DEMO,"
150 PRINT " SIMULTANEOUSLY PRESS THE 'CONTROL' AND 'C' KEYS":PRINT:PRINT
160 PRINT " 1 = HEX                  2 = GRID"
170 PRINT " 3 = PROP                 4 = LINES"
180 PRINT " 5 = CIRCLE               6 = CIRCLES"
190 PRINT " 7 = RNDLINES             8 = RNDLINES2"
200 PRINT " 9 = RECTANGLE":PRINT
210 INPUT "WHICH ? ",N%:IF N%<1 GOTO 210 ELSE IF N%>9 GOTO 210
220 ON N% GOTO HEX,GRID,PROP,LINES,CIRCLE,CIRCLES,RNDLINES,RNDLINES2,RECTANGLE
230 ;
240  "HEX":PALETTE 0,0
250 CLS:PI=4*ATN(1):C=COS(PI/3):S=SIN(PI/3)
260 C1=COS(PI/36):S1=SIN(PI/36):SF=.95
270 ;
280 GOSUB 300:GOTO 280
290 ;
300 X=100:Y=0:CX=160:CY=100:SC=1.16
310 FOR J%=1 TO 70:C%=C%+1:IF C%=16 THEN C%=1
320 COLOR C%:FOR I%=0 TO 6:SX=X*SC+CX:SY=CY+Y
330 IF I%=0 THEN SX1%=FIX(SX):SY1%=FIX(SY)
340 LSET (SX1%,SY1%)-(FIX(SX),FIX(SY))
350 SX1%=FIX(SX):SY1%=FIX(SY)
360 XN=X*C-Y*S:Y=X*S+Y*C:X=XN:NEXT I%
370 XN=SF*(X*C1-Y*S1):Y=SF*(X*S1+Y*C1):X=XN:NEXT J%
380 X=100:Y=0:CX=160:CY=100:SC=1.16
390 FOR J%=1 TO 70:FOR I%=0 TO 6:SX=X*SC+CX:SY=CY+Y
400 IF I%=0 THEN SX1%=FIX(SX):SY1%=FIX(SY)
410 LCLR (SX1%,SY1%)-(FIX(SX),FIX(SY))
420 SX1%=FIX(SX):SY1%=FIX(SY)
430 XN=X*C-Y*S:Y=X*S+Y*C:X=XN:NEXT I%
440 XN=SF*(X*C1-Y*S1):Y=SF*(X*S1+Y*C1):X=XN:NEXT J%:RETURN
450 ;
460 ;
470 ;
480  "GRID"
490 CLS:GOSUB 520:FOR I=0 TO 120 STEP 20:COLOR FIX(I/15)+1
500 FOR X=0 TO 190+I STEP 1:Y=(X*X-2*I*X)/190:X%=FIX(X):Y%=FIX(Y)
510 PSET X%+160,100-Y%:PSET 160-X%,Y%+100:NEXT X:NEXT I:STOP
520 FOR X%=40 TO 600 STEP 40:FOR Y%=4 TO 196 STEP 4:PSET X%,Y%:NEXT Y%:NEXT X%
530 FOR Y%=40 TO 160 STEP 40:FOR X%=4 TO 326 STEP 4:PSET X%,Y%:NEXT X%:NEXT Y%
540 RETURN
550 ;
560 ;
570  "PROP"
580 CLS:DIM X%[360],Y%[360]:K=ATN(1)/90:PALETTE 0,0
590 FOR I%=0 TO 180:X%[I%]=FIX(100.5*COS(D)):D=D+K:NEXT I%
600 FOR I%=359 TO 181 STEP -1:J%=J%+1:X%[I%]=-X%[J%]:NEXT I%
610 FOR I%=180 TO 359:Y%[K%]=-X%[I%]:K%=K%+1:NEXT I%
620 FOR I%=0 TO 179:Y%[K%]=X%[I%]:K%=K%+1:NEXT I%
630 FOR I%=0 TO 359:X%[I%]=X%[I%]+159:Y%[I%]=Y%[I%]+99:NEXT I%
640 ;
650 FOR I%=0 TO 4:FOR J%=72*I%+36 TO 72*I%+71:X%=X%[J%]:Y%=Y%[J%]
660 LSET (X%,Y%)-(318-X%,198-Y%):NEXT J%:NEXT I%
670 ;
680 C%=100*FIX(RND(0)*8)+10*FIX(RND(0)*8)+FIX(RND(0)*8)
690 T%=T%+1:IF T%=4 THEN T%=1
700 PALETTE T%,C%:COLOR T%
710 FOR H%=0 TO 35:FOR I%=H% TO 359 STEP 72
720 X%=X%[I%]:Y%=Y%[I%]:LSET (X%,Y%)-(318-X%,198-Y%)
730 X%=X%[I%+36]:Y%=Y%[I%+36]:LCLR (X%,Y%)-(318-X%,198-Y%)
740 NEXT I%:NEXT H%
750 ;
760 FOR H%=0 TO 35:FOR I%=H% TO 359 STEP 72
770 X%=X%[I%]:Y%=Y%[I%]:LCLR (X%,Y%)-(318-X%,198-Y%)
780 X%=X%[I%+36]:Y%=Y%[I%+36]:LSET (X%,Y%)-(318-X%,198-Y%)
790 NEXT I%:NEXT H%:GOTO 680
800 ;
810 ;
820  "LINES"
830 ;
840 PALETTE 0,0:CLS:S%=2
850 FOR X%=0 TO 319 STEP S%
860 C%=FIX(15*RND(0))+1:COLOR C%:LSET (X%,0)-(319-X%,100)
870 LSET (319-X%,100)-(X%,199):NEXT X%
880 FOR X%=0 TO 319 STEP S%:LCLR (X%,0)-(319-X%,100)
890 LCLR (319-X%,100)-(X%,199):NEXT X%
900 FOR I%=1 TO 15:C%=100*FIX(8*RND(0))+10*FIX(8*RND(0))+FIX(8*RND(0))
910 PALETTE I%,C%:NEXT I%
920 GOTO 850
930 ;
940 ;
950  "CIRCLE"
960 ;
970 CLS:DIM A%[640]:INIT A%[]=-1:J%=1:CNT%=30:PALETTE 0,0
980 K%=J%:FOR I%=180 TO 0 STEP -1:IF A%[I%]=K% GOTO 1020 ELSE A%[I%]=K%:K%=-K%
990 IF K%=-1 THEN CIRSET (260-I%,200-I%),FIX(FLT(I%)*.5)
1000 IF K%=1 THEN CIRCLR (260-I%,200-I%),FIX(FLT(I%)*.5)
1010 I%=I%-19
1020 NEXT I%:CNT%=CNT%-1
1030 IF CNT%>0 GOTO 980
1040 C%=C%+1:IF C%=16 THEN C%=1
1050 COLOR C%:J%=-J%:CNT%=30:GOTO 980
1060 FOR I%=1 TO 200:CIRCLR (320,200),I%:NEXT I%:GOTO 1030
1070 ;
1080 ;
1090  "CIRCLES"
1100 CLS:MODE 0:DIM A%[396]:INIT A%[]=-1:J%=1:CNT%=20:PALETTE 3,7
1110 C%=C%+1:IF C%=16 THEN C%=1
1120 COLOR C%
1130 K%=J%:FOR I%=1 TO 100:IF A%[I%]=K% GOTO 1160
1140 A%[I%]=K%:IF K%=1 THEN CIRSET (159,99),I% ELSE CIRCLR (159,99),I%
1150 K%=-K%:I%=I%+19
1160 NEXT I%:CNT%=CNT%-1:IF CNT%>0 GOTO 1130
1170 J%=-J%:CNT%=20:GOTO 1110
1180 ;
1190 ;
1200  "RNDLINES"
1210 ;
1220 CLS:DIM C%[251],X1%[251],X2%[251],Y1%[251],Y2%[251]
1230 PALETTE 0,0:PALETTE 15,777
1240  "LOOP":FOR I%=1 TO 250:C%[I%]=FIX(RND(0)*15+1)
1250 E=320:GOSUB 1310:X1%[I%]=R%:GOSUB 1310:X2%[I%]=R%
1260 E=200:GOSUB 1310:Y1%[I%]=R%:GOSUB 1310:Y2%[I%]=R%:NEXT I%
1270 CLS:FOR I%=1 TO 250:COLOR%=C%[I%]:COLOR COLOR%
1280 LSET (X1%[I%],Y1%[I%])-(X2%[I%],Y2%[I%]):NEXT I%
1290 HTAB FIX(26*RND(0)):VTAB FIX(25*RND(0))
1300 COLOR 15:PRINT "SHORT DELAY";:FOR D=1 TO 12000:NEXT D:GOTO LOOP
1310 R%=FIX(RND(0)*E):RETURN
1320 ;
1330 ;
1340  "RNDLINES2"
1350 ;
1360 DIM C%[251],X%[251],Y%[251]:CLS:PALETTE 0,0:PALETTE 15,777
1370  "LOOP1":FOR I%=1 TO 250:C%[I%]=FIX(RND(0)*15+1)
1380 E=320:GOSUB 1430:X%[I%]=R%:E=200:GOSUB 1430:Y%[I%]=R%:NEXT I%
1390 CLS:FOR I%=1 TO 250:COLOR%=C%[I%]:COLOR COLOR%
1400 LSET (319-X%[I%],199-Y%[I%])-(X%[I%],Y%[I%]):NEXT I%
1410 HTAB FIX(26*RND(0)):VTAB FIX(25*RND(0))
1420 COLOR 15:PRINT "SHORT DELAY";:FOR D=1 TO 8000:NEXT D:GOTO LOOP1
1430 R%=FIX(RND(0)*E):RETURN
1440 ;
1450 ;
1460  "RECTANGLE"
1470 CLS:PALETTE 0,0:DIM A%[640]:INIT A%[]=-1:J%=1:CNT%=20
1480 K%=J%:FOR I%=0 TO 99:IF A%[I%]=K% GOTO 1520 ELSE A%[I%]=K%:K%=-K%
1490 IF K%=-1 THEN RECTSET (100-I%,100-I%)-(I%+220,100+I%)
1500 IF K%=1 THEN RECTCLR (100-I%,100-I%)-(I%+220,100+I%)
1510 I%=I%+19
1520 NEXT I%:CNT%=CNT%-1:IF CNT%>0 GOTO 1480
1530 C%=C%+1:IF C%=16 THEN C%=1
1540 COLOR C%
1550 J%=-J%:CNT%=20:GOTO 1480
1560 ;
