' JAPI 2.0 DLLC JIT
include "dllcinc.sb"
oxy = dllfile("/sb22/modules/oxygen.dll")
o2_basic = dllproc( oxy, "o2_basic i =(c*source) " )
o2_exec = dllproc( oxy, "o2_exec i =(i call) " )
o2_error = dllproc( oxy, "o2_error c*=() " )
o2_errno = dllproc( oxy, "o2_errno i =() " )
o2_len = dllproc( oxy, "o2_len i =() " )
o2_mode = dllproc( oxy, "o2_mode (i mode) " )
dllcall(o2_mode,1)
src = """
extern
function mandel(float zre,zim,sys maxiter) as sys
float mx,my,betrag
sys iter
while iter < maxiter and betrag < 4.0
iter = iter+1
tmp = mx*mx-my*my+zre
my = 2*mx*my+zim
mx = tmp
betrag = (mx*mx + my*my)
wend
return iter
end function
sub finish()
terminate
end sub
function link(sys n) as sys
select n
case 0
return @finish
case 1
return @mandel
end select
end function
end extern
addr link
"""
dllcall(o2_basic, src)
dfn = dllcall(o2_exec,0)
mandel = dllproc(dfn,"mandel i = (f zre, f zim, i maxiter)", dllcald(dfn, 1))
Finish = dllproc(dfn,"Finish ()", dllcald(dfn, 0))
japi = dllfile("japi.dll")
j_start = dllproc(japi, "j_start i = ()")
j_frame = dllproc(japi, "j_frame i = (c * label)")
j_menubar = dllproc(japi, "j_menubar i = ( i obj)")
j_menu = dllproc(japi, "j_menu i = (i obj, c *label)")
j_menuitem = dllproc(japi, "j_menuitem i = (i obj, c *label)")
j_canvas = dllproc(japi, "j_canvas i = (i obj, i width , i height)")
j_setpos = dllproc(japi, "j_setpos (i obj, i xpos, i ypos)")
j_pack = dllproc(japi, "j_pack (i obj)")
j_show = dllproc(japi, "j_show (i obj)")
j_getaction = dllproc(japi, "j_getaction i = ()")
j_nextaction = dllproc(japi, "j_nextaction i = ()")
j_setcolor = dllproc(japi, "j_setcolor (i obj, i r, i g, i b)")
j_drawpixel = dllproc(japi, "j_drawpixel (i obj, i x, i y)")
j_quit = dllproc(japi, "j_quit ()")
CONST J_TRUE = 1
CONST J_FALSE = 0
xstart = -1.8
xend = 0.8
ystart = -1.0
yend = 1.0
hoehe = 240
breite = 320
if (dllcall(j_start) = J_FALSE) then
print("JAPI interface failed to start.\n")
end
end if
jframe = dllcall(j_frame,"JAPI 2.0 DLLC")
menubar = dllcall(j_menubar,jframe)
jfile = dllcall(j_menu,menubar,"File")
calc = dllcall(j_menu,menubar,"Calc")
quit = dllcall(j_menuitem,jfile,"Quit")
start = dllcall(j_menuitem,calc,"Start")
jstop = dllcall(j_menuitem,calc,"Stop")
canvas = dllcall(j_canvas,jframe,breite,hoehe)
dllcall(j_setpos,canvas,10,60)
dllcall(j_pack,jframe)
dllcall(j_show,jframe)
obj = 0
do_work = 0
while((obj <> jframe) and (obj <> quit))
if(do_work = 1) then
obj = dllcall(j_getaction)
else
obj = dllcall(j_nextaction)
end if
if(obj = start) then
x = -1
y = -1
do_work = 1
end if
if(obj = jstop) then
do_work = 0
end if
if(do_work = 1) then
x = (x+1) % breite
if(x = 0) then
y = (y+1) % hoehe
end if
if((x = breite-1) and (y = hoehe-1)) then
do_work = 0
else
zre = xstart + x*(xend-xstart)/breite
zim = ystart + y*(yend-ystart)/hoehe
it = dllcall(mandel,zre,zim,512)
dllcall(j_setcolor,canvas,it*11,it*13,it*17)
dllcall(j_drawpixel,canvas,x,y)
end if
end if
wend
dllcall(Finish)
dllcall(j_quit)
dllfile