1000  REM MANDELBROT SET PLOTTER FOR HP BASIC, WTN 6/10
1010  REM SPEEDUP VARS FOR ITERATION LOOP...
1020  LET O1=1
1022  LET O2=2
1024  LET O4=4
1040  REM L1=ITERATION LIMIT, L9=MAX LIMIT WHEN ZOOMING
1050  REM X1/Y1=X/Y CENTER, R1=RANGE IN X-DIRECTION
1060  REM X2,Y2=DISPLAY SIZE X,Y
1070  REM Y3=Y SCALE (X SCALE IS 1)
1080  REM D2=DETAIL FACTOR TYP .3 TO .8
1090  LET L1=200
1100  LET L9=2000
1110  LET X1=-.5
1120  LET Y1=-.5
1130  LET R1=2.2
1140  LET X2=72
1150  LET Y2=22
1160  LET Y3=.7
1170  LET D2=.5
1180  PRINT "MANDELBROT SET PLOTTER"
1190  PRINT "WHEN ZOOMING ENTER REGION AS:"
1200  PRINT ".-----------."
1210  PRINT "| 1 | 2 | 3 |"
1220  PRINT "|---+---+---|"
1230  PRINT "| 4 | 5 | 6 |"
1240  PRINT "|---+---+---|"
1250  PRINT "| 7 | 8 | 9 |"
1260  PRINT "`-----------'"
1270  PRINT "0) RUN WITH DEFAULTS  1) ENTER PLOT VARIABLES ";
1280  INPUT K
1290  IF K=0 OR K=1 THEN 1310
1300  STOP 
1310  IF K=0 THEN 1470
1320  PRINT X1;TAB(15)"X CENTER ";
1330  INPUT X1
1340  PRINT Y1;TAB(15)"Y CENTER ";
1350  INPUT Y1
1360  PRINT R1;TAB(15)"RANGE    ";
1370  INPUT R1
1380  IF R1 <= 0 THEN 1360
1390  PRINT L1;TAB(15)"LIMIT    ";
1400  INPUT L1
1410  IF L1<10 THEN 1390
1420  IF L1<L9 THEN 1440
1430  LET L9=L1
1440  PRINT D2;TAB(15)"DETAIL   ";
1450  INPUT D2
1460  IF D2 <= 0 OR D2>1 THEN 1440
1470  REM SET UP STUFF IN PREP FOR PLOTTING
1475  REM B9=NUMBER OF PLOT SYMBOLS
1480  LET B9=10
1490  LET X5=R1/X2
1500  LET Y5=R1/Y2*Y3
1510  LET X6=X1-X5*X2/2
1520  LET Y6=Y1-Y5*Y2/2
1530  PRINT 
1540  PRINT "X ="X1"Y ="Y1"RANGE ="R1"LIMIT ="L1
1550  FOR Y4=1 TO Y2
1560  FOR X4=1 TO X2
1570  LET X=X6+X4*X5
1580  LET Y=Y6+Y4*Y5
1590  LET X7=Y7=X8=Y8=C=0
1600  REM ITERATION LOOP
1610  LET X9=X8-Y8+X
1620  LET Y9=X7*Y7*O2+Y
1630  LET X7=X9
1640  LET Y7=Y9
1650  LET X8=X7*X7
1660  LET Y8=Y7*Y7
1670  LET C=C+O1
1680  IF (X8+Y8)<O4 AND C<L1 THEN 1610
1690  IF C<L1 THEN 1720
1700  LET C2=B9
1710  GOTO 1740
1720  LET C1=INT(C^D2)
1730  LET C2=C1-(INT(C1/(B9-1))*(B9-1))+1
1740  GOSUB 2200
1750  NEXT X4
1760  PRINT 
1770  NEXT Y4
1780  PRINT "1-9) ZOOM   0) UNZOOM   10) CHANGE VARS  ";
1790  INPUT K
1800  IF K=10 THEN 1320
1810  IF K=0 THEN 1880
1820  LET R1=R1/3
1830  LET L1=INT(L1*1.5)
1840  IF L1<L9 THEN 1860
1850  LET L1=L9
1860  IF K=1 THEN 1900
1862  IF K=2 THEN 1930
1863  IF K=3 THEN 1950
1864  IF K=4 THEN 1980
1865  IF K=5 THEN 1490
1866  IF K=6 THEN 2000
1867  IF K=7 THEN 2020
1868  IF K=8 THEN 2050
1869  IF K=9 THEN 2070
1870  STOP 
1880  LET R1=R1*3
1890  GOTO 1490
1900  LET X1=X1-R1
1910  LET Y1=Y1-R1*Y3
1920  GOTO 1490
1930  LET Y1=Y1-R1*Y3
1940  GOTO 1490
1950  LET X1=X1+R1
1960  LET Y1=Y1-R1*Y3
1970  GOTO 1490
1980  LET X1=X1-R1
1990  GOTO 1490
2000  LET X1=X1+R1
2010  GOTO 1490
2020  LET X1=X1-R1
2030  LET Y1=Y1+R1*Y3
2040  GOTO 1490
2050  LET Y1=Y1+R1*Y3
2060  GOTO 1490
2070  LET X1=X1+R1
2080  LET Y1=Y1+R1*Y3
2090  GOTO 1490
2095  REM PLOT SYMBOLS: [SPACE].-:%$&@*#
2200  LET C2=INT(C2)
2210  IF C2=1 THEN 2320
2220  IF C2=2 THEN 2340
2230  IF C2=3 THEN 2360
2240  IF C2=4 THEN 2380
2250  IF C2=5 THEN 2400
2260  IF C2=6 THEN 2420
2270  IF C2=7 THEN 2440
2280  IF C2=8 THEN 2460
2290  IF C2=9 THEN 2480
2300  PRINT " ";
2310  RETURN 
2320  PRINT ".";
2330  RETURN 
2340  PRINT "-";
2350  RETURN 
2360  PRINT ":";
2370  RETURN 
2380  PRINT "%";
2390  RETURN 
2400  PRINT "$";
2410  RETURN 
2420  PRINT "&";
2430  RETURN 
2440  PRINT "@";
2450  RETURN 
2460  PRINT "*";
2470  RETURN 
2480  PRINT "#";
2490  RETURN 
2500  END 

