# David BennIterated Function System in ACE BASIC

Created by

• Ignore whitespace
• Hide word diff
`+'...IFS-compressed image reconstructor`
`+`
`+SUB help`
`+  dummy=MsgBox("Select project type and color.","Continue")`
`+END SUB`
`+`
`+SUB about`
`+  msg\$ = "Iterated Function System by David Benn "+chr\$(169)`
`+  msg\$ = msg\$+" 1994 for Karen."`
`+  dummy=MsgBox(msg\$,"Continue")`
`+END SUB`
`+`
`+SUB enable_menus`
`+  menu 1,0,1	'..enable project menu`
`+  menu 2,0,1	'..enable color menu`
`+  menu 3,2,0	'..disable "stop" item`
`+END SUB`
`+`
`+randomize timer`
`+`
`+'...read probability levels, x & y factors and IFS data...`
`+CONST pats=6`
`+`
`+dim n%(pats),xscale%(pats),yscale%(pats),xoffset%(pats),yoffset%(pats)`
`+`
`+FOR R=1 TO pats`
`+  read n%(r),xscale%(r),yscale%(r),xoffset%(r),yoffset%(r)`
`+NEXT R`
`+`
`+DATA 3,150,115,160,60	'..Sierpinski triangle`
`+DATA 4,150,75,225,70	'..Square`
`+DATA 4,25,12,285,60	'..Fern`
`+DATA 4,250,225,300,60	'..Tree #1`
`+DATA 4,150,75,160,40	'..Tree #2`
`+DATA 4,54,26,230,50	'..Sunflower`
`+  `
`+pt=0      '...reset probability counter`
`+`
`+dim a(pats,4),b(pats,4),c(pats,4),d(pats,4),e(pats,4),f(pats,4),p(pats,4)`
`+`
`+FOR I=1 TO 3`
`+  read a(1,I),b(1,I),c(1,I),d(1,I),e(1,I),f(1,I),pk`
`+  pt=pt+pk`
`+  p(1,I)=pt`
`+NEXT I`
`+`
`+FOR J=2 TO pats `
`+pt=0             '...reset probability counter `
`+  FOR L=1 TO 4`
`+    read a(J,L)`
`+    read b(J,L)`
`+    read c(J,L)`
`+    read d(J,L)`
`+    read e(J,L)`
`+    read f(J,L),pk`
`+    pt=pt+pk`
`+    p(J,L)=pt`
`+  NEXT L`
`+NEXT J`
`+`
`+'...Sierpinski Triangle...`
`+`
`+DATA .5,0,0,.5,0,0,.33`
`+DATA .5,0,0,.5,1,0,.33`
`+DATA .5,0,0,.5,.5,.5,.34`
`+`
`+'...Square...`
`+`
`+DATA .5,0,0,.5,0,0,.25`
`+DATA .5,0,0,.5,.5,0,.25`
`+DATA .5,0,0,.5,0,.5,.25`
`+DATA .5,0,0,.5,.5,.5,.25`
`+`
`+'...Fern...`
`+`
`+DATA 0,0,0,.16,0,0,.01`
`+DATA .2,-.26,.23,.22,0,1.6,.07`
`+DATA -.15,.28,.26,.24,0,.44,.07`
`+DATA .85,.04,-.04,.85,0,1.6,.85`
`+`
`+'...Tree #1...`
`+`
`+DATA 0,0,0,.5,0,0,.05`
`+DATA .1,0,0,.1,0,.2,.15`
`+DATA .42,-.42,.42,.42,0,.2,.4`
`+DATA .42,.42,-.42,.42,0,.2,.4`
`+`
`+'...Tree #2...`
`+`
`+DATA 0.195,-0.488,0.344,0.443,0.722,0.536,0.25`
`+DATA 0.462,0.414,-0.252,0.361,0.538,1.167,0.25`
`+DATA -0.058,-0.070,0.453,-0.111,1.125,0.185,0.25`
`+DATA -0.045,0.091,-0.469,-0.022,0.863,0.871,0.25`
`+`
`+'...Sunflower...`
`+`
`+DATA -.3,-.6,1.1,.11,4,0,.02`
`+DATA -.3,-1,1,.01,4,0,.95`
`+DATA .02,.01,0,-.2,0,0,.01`
`+DATA 0,.02,0,0,.01,.02,.02`
`+`
`+screen 1,640,225,3,2`
`+window 1,"IFS",(0,0)-(640,225),0,1`
`+`
`+const black=0,white=1,green=2,red=3,blue=4,yellow=5`
`+`
`+palette black,0,0,0`
`+palette white,1,1,1 `
`+palette green,0,1,0 `
`+palette red,1,0,0   `
`+palette blue,.25,.25,1`
`+palette yellow,1,1,.13`
`+`
`+menu 1,0,1,"Project"`
`+menu 1,1,1,"Sierpinski Triangle"`
`+menu 1,2,1,"Square"`
`+menu 1,3,1,"Fern"`
`+menu 1,4,1,"Tree #1"`
`+menu 1,5,1,"Tree #2"`
`+menu 1,6,1,"Sunflower"`
`+menu 1,7,0,"-------------------"`
`+menu 1,8,1,"Help...","H"`
`+menu 1,9,1,"About...","A"`
`+`
`+menu 2,0,1,"Colour"`
`+menu 2,1,1,"White"`
`+menu 2,2,1,"Green"`
`+menu 2,3,1,"Red"`
`+menu 2,4,1,"Blue"`
`+menu 2,5,1,"Yellow"`
`+`
`+menu 3,0,1,"Special"`
`+menu 3,1,0,"Clear Window","C"`
`+menu 3,2,0,"Stop","S"`
`+menu 3,3,1,"Quit","Q"`
`+`
`+const havingfun=-1`
`+`
`+while havingfun`
`+`
`+ op%=0`
`+ fgnd%=0`
`+`
`+ repeat`
`+   menu wait`
`+   mnum = menu(0)`
`+   item = menu(1)`
`+   if mnum=1 then`
`+	'..project`
`+	if item=8 or item=9 then `
`+	  case`
`+	    item=8 : help`
`+	    item=9 : about`
`+	  end case`
`+	else`
`+	  op% = item`
`+	end if`
`+   else`
`+	if mnum=2 then`
`+	  '..colour`
`+	  fgnd% = item`
`+	else`
`+	  '..special`
`+	  if item=1 then cls`
`+	  if item=3 then quit`
`+	end if`
`+   end if`
`+ until op% >= 1 and op% <= pats and fgnd% > 0`
`+ `
`+ '..disable menus 1 and 2`
`+ menu 1,0,0`
`+ menu 2,0,0`
`+`
`+ '..enable special menu's CLS and STOP items`
`+ menu 3,1,1`
`+ menu 3,2,1`
`+ `
`+ ON MENU gosub handle_menu`
`+ MENU ON`
`+`
`+ '..initial x,y`
`+ x=0`
`+ y=0`
`+`
`+ '...Do iterations`
`+ color black,black`
`+ CLS`
`+ color fgnd%,black`
`+`
`+ i&=1`
`+ finished=0`
`+ repeat`
`+  R=RND`
`+  IF R <= p(op%,1) THEN `
`+     k%=1`
`+  ELSE`
`+     IF R <= p(op%,2) THEN `
`+        k%=2`
`+     ELSE`
`+        IF R <= p(op%,3) THEN k%=3 ELSE k%=n%(op%)`
`+     end if`
`+  END IF `
`+  newx = a(op%,k%) * x + b(op%,k%) * y + e(op%,k%)`
`+  newy = c(op%,k%) * x + d(op%,k%) * y + f(op%,k%) `
`+  x=newx`
`+  y=newy`
`+  outX% = x * xscale%(op%) + xoffset%(op%)`
`+  outY% = 200 - (y * yscale%(op%) + yoffset%(op%)) `
`+  PSET (outX%,outY%)`
`+  i&=i&+1`
`+ until i& > 25000& or finished`
`+ enable_menus`
`+wend`
`+`
`+handle_menu:`
`+  mnum = menu(0)`
`+  item = menu(1)`
`+  if mnum=3 then`
`+    if item=1 then cls`
`+    if item=2 then finished = -1`
`+    if item=3 then quit`
`+  end if`
`+RETURN`
`+`
`+quit:`
`+  menu clear`
`+  window close 1`
`+  screen close 1`
`+END`