0REM MATH GRAPHICS  3/1/87
1REM Compute Dec. 1986
2REM written for Apple  
3REM by Warren Block  
4REM Modified and Enhanced          and greatly changed
5REM for  * ADAM * 
6REM by Jim Siler                   1121 Cranbrook Dr.
7REM Hixson, TN. 37343
8REM If you have problems           loading all the                program, then                  POKE 12185,239
9REM this is needed to              increase BASIC line
10REM character limit
11LOMEM :32800
12POKE 16149, 255:POKE 16150, 255:POKE 16134, 3
13DIM x1(100), y1(100)
14ONERR  GOTO 9999
15DIM q(41), z(41):REM *for DONUT* 
16DIM id$(27):REM * id=individual drawings
17FOR x=1 TO 27:READ id$(x)
18NEXT
20DATA Ball of String,Lined Circle,Square Circle,Cloverleaf,Circular Spikes,Exploded Circular Spikes
22DATA Flowing Cone,Multiple Lobes,Sunflowers,Logo Squares,Snail Shells,Plus Oval,Square Spinner,Line Spinner
24DATA Double Oval,Moebius Ring,Bouncing Line,Roller Coaster,Roller Coaster II,Roller Coaster III
26DATA Double Oval Cone,Spring,Ring Circle,Twisted Ring,?,Square Tube,?
30DIM cc$(15):FOR x=1 TO 15:READ cc$(x):NEXT
32DATA Black,Medium Green,Light Green,Dark Blue,Medium Blue,Dark Red,Aqua/Cyan,Medium Red
34DATA Light Red,Dark Yellow,Yellow,Dark Green,Magenta,Gray,White
55FOR x=0 TO 15:POKE 18765+x, x:POKE 18781+x, x:NEXT
60DATA 229,42,64,63,35,34,64,63,225,201
70FOR x=172 TO 181:READ ml:POKE x, ml:NEXT
80POKE 171, 0:POKE 11907, 201
100POKE 16953, 32:REM make cursor blank
180&   set up shape table
190FOR a=32768 TO 32788:READ d:POKE a, d:NEXT
200POKE 16766, 0:POKE 16767, 128
201GOSUB 4000
202GOSUB 4090
204IF cflag=1 AND flag=1 THEN GOSUB 2000:GOSUB 4090
210&   initialize
212IF iflag=1 THEN GOSUB 3200
214 c=INT(RND(1)*15):IF c=0 THEN GOTO 214
215 c2=INT(RND(1)*15):IF c2=c THEN  c2=c+1
216IF c2>15 THEN  c2=14
217IF c2=0 THEN GOTO 215
218POKE 25431, c2:POKE 25471, c2+c2*16
219IF cflag=1 THEN POKE 25431, cb%:POKE 25471, cb%+cb%*16
220HGR2
225HCOLOR =c
226IF cflag=1 THEN HCOLOR =cd%
230&   set numeric constants
240 p1=3.14159: p2=p1*2: p3=p1/2: pi=3.14159
250 x=127: y=95
260&   shape table numbers
270 s1=1: s2=2: s3=3
280FOR t=1 TO 28
285IF iflag=1 THEN  t=id%
290ON t GOSUB 380, 400, 420, 440, 460, 480, 500, 520, 540, 560, 580, 600, 620, 640, 660, 680, 700, 720, 727, 740, 760, 820, 840, 850, 920, 940, 960, 1000
300&   wait a second
310FOR l=1 TO 2000
320NEXT
325IF iflag=1 THEN GET key$:GOTO 202
330&   reset and continue
334 c=INT(RND(1)*15):IF c=0 THEN GOTO 334
335 c2=INT(RND(1)*15):IF c2=c THEN  c2=c+1
336IF c2>15 THEN  c2=14
337IF c2=0 THEN GOTO 335
339POKE 25431, c2:POKE 25471, c2+c2*16
340IF cflag=1 THEN POKE 25431, cb%:POKE 25471, cb%+cb%*16
342HGR2
345HCOLOR =c
346IF cflag=1 THEN HCOLOR =cd%
350NEXT
360GOTO 280
370&   *A Ball of String*
380 ox=52: oy=59: r=95:FOR l=1 TO 175: z=RND(1)*p2: nx=r*COS(z)+x: ny=r*SIN(z)+y:HPLOT ox, oy TO nx, ny: ox=nx: oy=ny:NEXT:RETURN
390&   *Lined Circle*
400 z=p2*RND(1): r=95: cx=r*COS(z)+x: cy=r*SIN(z)+y:FOR l=1 TO 130: z=p2*RND(1): nx=r*COS(z)+x: ny=r*SIN(z)+y:HPLOT cx, cy TO nx, ny:NEXT:RETURN
410&   *Square Circle*
420 r=95: r2=r^2+1:FOR j=0 TO r STEP 5: px=SQR(r2-j*j): py=SQR(r2-px*px):HPLOT px+x, py+y TO x-px, py+y TO x-px, y-py TO px+x, y-py TO px+x, py+y:NEXT:RETURN
430&   *Cloverleaf*
440 z=2: r=0: z1=.5: r1=.5: c=10.18:SCALE =3:FOR l=1 TO 150: z=z+z1: r=r+r1: nx=r*COS(z)+x: ny=r*SIN(z)+y:HPLOT x, y TO nx, ny:ROT =(z-p2*INT(z/p2))*c:DRAW s1 AT nx, ny:NEXT:RETURN
450&   *Circular Spikes*
460 r1=20: r2=45: r3=115: r4=85:FOR l=0 TO p2 STEP p1/3:FOR l1=0 TO p2 STEP p1/6: x1=r3*COS(l1)+x: y1=r4*SIN(l1)+y: x2=r1*COS(l)+x: y2=r2*SIN(l)+y:HPLOT x1, y1 TO x2, y2:NEXT:NEXT:RETURN
470&   *Exploded Circular Spikes*
480 r1=20: r2=45: r3=115: r4=85:FOR l=0 TO p2 STEP p1/3:FOR l1=0 TO p2 STEP p1/6: x1=r3*COS(l1)+x: y1=r4*SIN(l)+y: x2=r1*COS(l)+x: y2=r2*SIN(l1)+y:HPLOT x1, y1 TO x2, y2:NEXT:NEXT:RETURN
490&   *Flowing Cone*
500 r=95: l=3:FOR j=0 TO p2 STEP p1/100: px=r*COS(j*l)+x: py=r*SIN(j)+y:HPLOT x, y TO px, py:NEXT:RETURN
510&   *Multiple Lobes*
520 c=95: l=2+2*(RND(1)>.5):FOR th=0 TO p2 STEP p2/128: r=c*SIN(l*th): nx=r*COS(th)+x: ny=r*SIN(th)+y:HPLOT x, y TO nx, ny:NEXT:RETURN
530&   *Sunflowers*
540FOR j=1 TO 10: rx=150*RND(1): ry=150*RND(1):FOR k=1 TO 40 STEP 5*RND(1)+1.5:SCALE =20:ROT =k:DRAW s1 AT rx, ry:NEXT:NEXT:RETURN
550&   *Logo Squares*
560FOR j=1 TO 10: rx=200*RND(1)+15: ry=180*RND(1):FOR k=1 TO 20*RND(1) STEP 5*RND(1)+.5:SCALE =k+3:ROT =k:DRAW s2 AT rx, ry:NEXT:NEXT:RETURN
570&   *Snail Shells*
580 c=3:FOR j=1 TO 10: rx=150*RND(1)+15: ry=150*RND(1)+10:FOR k=2 TO 80 STEP 5*RND(1)+.75:SCALE =k/c:ROT =k
581IF k/c<2 THEN SCALE =2
582DRAW s3 AT rx, ry:NEXT:NEXT:RETURN
590&   *Plus Oval*
600 c=10.18:SCALE =25: r1=105: r2=50:FOR j=0 TO p2 STEP p2/64:ROT =j*c:DRAW s1 AT r1*COS(j)+x, r2*SIN(j)+y:NEXT:RETURN
610&   *Square Spinner*
620SCALE =20: r1=100: r2=60: sc=40.74:FOR j=0 TO p2 STEP p2/119:ROT =j*sc:DRAW s2 AT r1*COS(j)+x, r2*SIN(j)+y:NEXT
625SCALE =5: r1=50: r2=14: sc=20.37:FOR j=0 TO p2 STEP p2/50:ROT =j*sc:DRAW s2 AT r1*COS(j)+x, r2*SIN(j)+y:NEXT:RETURN
630&   *Line Spinner*
640SCALE =25: r1=85: r2=45: s=20.37+(20.37*(RND(1)>.5)):FOR j=0 TO p2 STEP p2/192:ROT =j*s:DRAW s3 AT r1*COS(j)+x, r2*SIN(j)+y:NEXT:RETURN
650&   *Double Oval*
660FOR j=0 TO p2 STEP p1/64: r1=95: r2=35: r3=110: x1=r3*COS(j)+x: y1=r2*SIN(j)+y: x2=r2*COS(j-p1)+x: y2=r1*SIN(j-p1)+y:HPLOT x1, y1 TO x2, y2:NEXT:RETURN
670&   *Moebius Ring*
680 of=pi/3:FOR j=0 TO p2 STEP pi/64: r1=95: r2=35: r3=110: x1=r3*COS(j)+x: y1=r2*SIN(j)+y: x2=r2*COS(j)+x: y2=r1*SIN(j+of)+y:HPLOT x1, y1 TO x2, y2:NEXT:RETURN
690&   *Bouncing Line*
700 of=pi/3:FOR j=0 TO p2 STEP pi/64: r1=95: r2=35: r3=110: x1=r3*COS(j)+x: y1=r2*SIN(j)+y: x2=r2*COS(j+of)+x: y2=r1*SIN(j)+y:HPLOT x1, y1 TO x2, y2:NEXT:RETURN
710&   *Roller Coaster*
720SCALE =15: sc=2.6: px=15: r=70: c=10.18:FOR j=0 TO p2+pi STEP p2/54:ROT =j*c:DRAW s1 AT px, r*SIN(j)+y: px=px+sc:NEXT
725FOR j=0 TO p2+pi STEP p2/54: px=px-sc:ROT =jc:DRAW s1 AT px, r*SIN(-j)+y:NEXT:RETURN
726REM ** Roller Coaster II
727SCALE =10: sc=2.6: px=15: r=70: c=10.18:FOR j=0 TO p2+pi STEP p2/54:ROT =j*c:DRAW s2 AT px, r*SIN(j)+y: px=px+sc:NEXT
728FOR j=0 TO p2+pi STEP p2/54: px=px-sc:ROT =jc:DRAW s2 AT px, r*SIN(-j)+y:NEXT:RETURN
730&   *Roller Coaster III*
740 sc=2.8:SCALE =10: px=10: r=70: c=10.18:FOR j=0 TO p2+pi STEP p2/54:ROT =j*c:DRAW s3 AT px, r*SIN(j)+y: px=px+sc:NEXT
745FOR j=0 TO p2+pi STEP p2/54: px=px-sc:ROT =j*c+32:DRAW s3 AT px, r*SIN(-j)+y:NEXT:RETURN
750&   *Double Oval Cone*
760 r1=120: r2=30: y1=40: y2=152:FOR j=pi TO 3*pi STEP pi/32: px=x-r1*COS(j): py=y1-r2*SIN(j): cx=r1*c0s(j)+x: cy=r2*SIN(j)+y2:HPLOT px, py TO cx, cy:NEXT:RETURN
770&   shape table data
780DATA 3,0,8,0,13,0,19,0
790DATA 38,52,47,61,0,35
800DATA 45,54,63,4,0,45,0
810REM * SPRING *
820 l=35: w=35:FOR j=80 TO 160 STEP 6: s=1/30: a=8*ATN(1):FOR i=s TO a STEP s: x=SIN(i)*l+j: y=COS(i)*w+80:HPLOT x, y TO x+3, y-3:NEXT:NEXT:RETURN
830&   * RING CIRCLE* 
840 n=15: nn=10: rad=.5*(159-2*nn): d=.07
842 ll=(8*ATN(1))/n-1E-05: k=0:FOR i=ll TO 8*ATN(1) STEP ll: k=k+1
845 x1(k)=SIN(i)*rad+128: y1(k)=COS(i)*rad+79:NEXT:FOR k=1 TO n:FOR i=d TO 8*ATN(1) STEP d
847 p4=SIN(i)*nn+x1(k): p5=COS(i)*nn+y1(k):HPLOT p4, p5:HPLOT p4+1, p5+1:HPLOT p4, p5+5:HPLOT p4+5, p5:NEXT:NEXT
848 h1=128: v1=80:HCOLOR =1: r=pi/180:FOR j=0 TO 2*pi STEP r: h2=15*SIN(j): v2=15*COS(j):HPLOT h1, v1 TO h1+h2, v1-v2:NEXT
849RETURN
850REM * DONUT * 
852 n=35: a=6.286: s=a/n-1E-03: k=0:FOR i=s TO a STEP s: k=k+1: q(k)=SIN(i)*25+x: z(k)=COS(i)*55+y:NEXT
854 ss=3.9: ss=ss-.13: aa=ss+p1
860FOR j=1 TO k:FOR i=ss TO aa STEP .033: h1=SIN(i)*20+q(j): h2=COS(i)*20+z(j):HPLOT h1, h2:NEXT
862 ss=ss+s: aa=aa+s:NEXT:FOR i=1 TO 41: q(i)=0: z(i)=0:NEXT
864RETURN
919REM * unnamed *
920FOR j=3 TO 130:SCALE =j/3:ROT =j:DRAW 3 AT 120, 40+j:NEXT:RETURN
940FOR j=3 TO 110:SCALE =j/3:ROT =j:DRAW 2 AT 20+j, 10+j:NEXT:RETURN
960FOR j=3 TO 130 STEP 2:SCALE =j/3:ROT =j:DRAW 1 AT 225-j, 10+j:NEXT
965FOR j=130 TO 3 STEP -3:SCALE =j/4:ROT =j:DRAW 1 AT 40+(j/2), 10+j:NEXT:RETURN
1000TEXT:HTAB 5:VTAB 10:? " THE END!! "
1999FOR x=1 TO 1500:NEXT:GOTO 201
2000 flag=0
2010TEXT:HTAB 10:? "COLOR SELECT"
2020?:?:GOSUB 2200
2030?:?:INPUT "Pick Background Color (1-15) "; cb$
2040 cb%=VAL(cb$)
2050IF cb%<1 OR cb%>15 THEN 2030
2060POKE 25431, cb%
2065POKE 25471, cb%+cb%*16
2070?:? "Pick Drawing Color (1-15)"
2080INPUT " not the same as background "; cd$
2090 cd%=VAL(cd$)
2100IF cd%<1 OR cd%>15 THEN 2070
2110IF cd%=cb% THEN ?:? "Background this color":? "Start over":FOR i=1 TO 1500:NEXT:GOTO 2000
2150RETURN
2199REM * routine for color names*
2200INVERSE:? " "; 
2202FOR x=1 TO 15
2205? x; "="; cc$(x), :NEXT:FOR x=1 TO 15:? " "; :NEXT:NORMAL:RETURN
3200TEXT:FOR x=1 TO 15:HTAB 2:? x; "="; id$(x):NEXT
3230?:? "Pick one (1-15) "
3235INPUT "or just <RETURN> for more "; key$
3237IF key$="" THEN 3260
3240 id%=VAL(key$):IF id%<1 OR id%>15 THEN TEXT:GOTO 3200
3250RETURN
3260TEXT:FOR x=16 TO 27:HTAB 2:? x; "="; id$(x):NEXT
3270?:? "Pick one (16-27) "
3285INPUT "or just <RETURN> for more "; key$
3290IF key$="" THEN 3200
3300 id%=VAL(key$):IF id%<16 OR id%>27 THEN TEXT:GOTO 3260
3320RETURN
3999REM * menu routine *
4000TEXT:REM add title later
4001ONERR  GOTO 9998
4003 ds%=PEEK(17059): dt%=PEEK(17115): di%=PEEK(17126)
4005POKE 17059, 11:POKE 17115, 71:POKE 17126, 195
4007TEXT
4010 t$="ADAM Math Graphics"
4015 j=1
4020FOR x=31 TO 6 STEP -1
4040HTAB x: p$=LEFT$(t$, j)
4045 j=j+1:IF j>18 THEN  p$=p$+" "
4050? p$; 
4070NEXT x
4080FOR x=1 TO 2500:NEXT:TEXT
4085RETURN
4090 j=1:TEXT
4092FOR x=31 TO 6 STEP -1
4093FOR i=1 TO 100:NEXT
4094HTAB x: p$=LEFT$(t$, j)
4095 j=j+1:IF j>18 THEN  p$=p$+" "
4097VTAB 2:? p$; 
4099NEXT x
4100VTAB 10:HTAB 2
4110? "Smartkey I  = Run All":HTAB 2:? "Smartkey II = Run Individual"
4120HTAB 2:? "Smartkey III= Color Select":HTAB 2:? "Smartkey IV = RND  Color"
4125HTAB 2:? "Smartkey V  = Quit"
4130?:?:HTAB 2:? "Pick I - V "
4140POKE 64885, 0
4150 key%=PEEK(64885)
4160IF key%=0 THEN 4150
4170IF key%<129 OR key%>141 THEN 4140
4180IF key%=134 THEN 4140
4190IF key%=129 OR key%=137 THEN  iflag=0
4200IF key%=130 OR key%=138 THEN  iflag=1
4210IF key%=131 OR key%=139 THEN  cflag=1: flag=1
4220IF key%=132 OR key%=140 THEN  cflag=0:GOTO 4090
4230IF key%=133 OR key%=141 THEN GOTO 9999
4250RETURN
9998CLRERR:RUN
9999POKE 16953, 95:POKE 16134, 129:POKE 17059, ds%:POKE 17115, dt%:POKE 17126, di%:TEXT:END
