why not
pi = 4*atn(1)
sw = 800
sh = 600
s$ = "33111121131112121222132114211123113231"
screen _newimage(sw, sh, 32)
screen ,,1,0
pset (sw/2, sh/2),_rgb(100,100,100)
for a=0 to 2*pi step 0.01
x = 100*cos(a) + 100*cos(14*a)
y = 100*sin(a) + 100*sin(14*a)
line -(sw/2 + x, sh/2 + y),_rgb(35,35,35)
next
circle (sw/2, sh/2), 8
circle (sw/2, sh/2), 12
circle (sw/2, sh/2), 210 - 5,_rgb(100,100,100)
circle (sw/2, sh/2), 280 + 5,_rgb(100,100,100)
circle (sw/2, sh/2), 280 + 10,_rgb(100,100,100)
a = -pi/2
do while i < len(s$)-1
i = i + 1
c$ = mid$(s$, i, 1)
b = a - 0.05*(val(c$))*0.5
for k=0 to val(c$) - 1
i = i + 1
select case mid$(s$, i, 1)
case "1"
line (sw/2 + 210*cos(b), sh/2 + 210*sin(b))-step(70*cos(b), 70*sin(b))
case "2"
if val(c$) > 1 then c = b + 0.05*0.5*((k = 0) - (k <> 0)) else c = b
line (sw/2 + 210*cos(c), sh/2 + 210*sin(c))-step(70*cos(c - 0.05*3), 70*sin(c - 0.05*3))
line (sw/2 + 210*cos(c), sh/2 + 210*sin(c))-step(70*cos(c + 0.05*3), 70*sin(c + 0.05*3))
case "3"
if val(c$) > 1 then c = b + 0.05*0.5*((k = 0) - (k <> 0)) else c = b
line (sw/2 + 210*cos(c - 0.05*0.8), sh/2 + 210*sin(c - 0.05*0.8))-(sw/2 + 280*cos(c + 0.05*0.8), sh/2 + 280*sin(c + 0.05*0.8))
line (sw/2 + 210*cos(c + 0.05*0.8), sh/2 + 210*sin(c + 0.05*0.8))-(sw/2 + 280*cos(c - 0.05*0.8), sh/2 + 280*sin(c - 0.05*0.8))
end select
b = b + 0.05
next
a = a + pi/6
loop
screen ,,0,0
do
t = 100*timer
pcopy 1,0
b = 2*pi*(t/36 mod 1200)/1200- pi/2
pset (sw/2, sh/2)
for a=0 to pi step 0.01
x = 140*(0.8*cos(a))^5*abs(3*cos(8*a)^2)*sin(a)*cos(b) - 180*sin(a)*sin(b)
y = 140*(0.8*cos(a))^5*abs(3*cos(8*a)^2)*sin(a)*sin(b) + 180*sin(a)*cos(b)
line -(sw/2 + x, sh/2 + y)
next
b = 2*pi*(t*100 mod 360000)/360000 - pi/2
pset (sw/2, sh/2)
for a=0 to pi step 0.01
x = 55*(cos(a))^5*abs(2*(cos(4*a))^2 - 0.5)*sin(a)*cos(b) - 280*sin(a)*sin(b)
y = 55*(cos(a))^5*abs(2*(cos(4*a))^2 - 0.5)*sin(a)*sin(b) + 280*sin(a)*cos(b)
line -(sw/2 + x, sh/2 + y)
next
_display
_limit 100
loop until _keyhit=27
sleep
system