' JAPI 2.0 DLLC
DECLARE SUB dllfile ALIAS "dllfile" LIB "DLLC"
DECLARE SUB dllproc ALIAS "dllproc" LIB "DLLC"
DECLARE SUB dllcall ALIAS "dllcall" LIB "DLLC"
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
endif
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)
endif
if(obj = start) then
x = -1
y = -1
do_work = 1
endif
if(obj = jstop) then
do_work = 0
endif
if(do_work = 1) then
x = (x+1) % breite
if(x = 0) then
y = (y+1) % hoehe
endif
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 = mandel(zre,zim,512)
dllcall(j_setcolor,canvas,it*11,it*13,it*17)
dllcall(j_drawpixel,canvas,x,y)
endif
endif
wend
dllcall(j_quit)
function mandel(zre,zim,maxiter)
mx = 0.0
my = 0.0
iter=0
betrag=0.0
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
mandel=iter
end function
library "japi.dll"
include once "japi.h"
PS: japi uses cdecl. Now I can get a whole Mandelbrot
' graphic.o2bas
extern lib "japi.dll" cdecl
include once "japi.h"
end extern
#lookahead
if( j_start() = J_FALSE ) then
print "can't connect to JAPI server"
end
endif
sys i,x,y
dim as sys x[9]
dim as sys y[9]
for i = 0 to 9
x[i]=(i+1)*10
if mod(i,1)<>0 then
y[i]=10
else
y[i]=90
end if
next i
sys jframe = j_frame("OxygenBasic JAPI 2.0")
j_setsize(jframe,720,260)
sys canvas = j_canvas(jframe,700,230)
j_setpos(canvas,10,30)
j_show(jframe)
j_pack(jframe)
j_setnamedcolor(canvas,J_BLUE)
j_translate(canvas,10,10)
j_drawline(canvas,10,10,90,90)
j_drawstring(canvas,0,105,"Line")
j_translate(canvas,100,0)
j_drawpolygon(canvas,10,x,y)
j_drawstring(canvas,0,105,"Polygon")
j_translate(canvas,100,0)
j_drawrect(canvas,10,10,80,80)
j_drawstring(canvas,0,105,"Rectangle")
j_translate(canvas,100,0)
j_drawroundrect(canvas,10,10,80,80,20,20)
j_drawstring(canvas,0,105,"RoundRect")
j_translate(canvas,100,0)
j_drawcircle(canvas,50,50,40)
j_drawstring(canvas,0,105,"Circle")
j_translate(canvas,100,0)
j_drawoval(canvas,50,50,40,20)
j_drawstring(canvas,0,105,"Oval")
j_translate(canvas,100,0)
j_drawarc(canvas,50,50,40,30,113,210)
j_drawstring(canvas,0,105,"Arc")
j_translate(canvas,-600,100)
j_drawpolyline(canvas,10,x,y)
j_drawstring(canvas,0,105,"Polyline")
j_translate(canvas,100,0)
j_fillpolygon(canvas,10,x,y)
j_drawstring(canvas,0,105,"FillPolygon")
j_translate(canvas,100,0)
j_fillrect(canvas,10,10,80,80)
j_drawstring(canvas,0,105,"FillRectangle")
j_translate(canvas,100,0)
j_fillroundrect(canvas,10,10,80,80,20,20)
j_drawstring(canvas,0,105,"FillRoundRect")
j_translate(canvas,100,0)
j_fillcircle(canvas,50,50,40)
j_drawstring(canvas,0,105,"FillCircle")
j_translate(canvas,100,0)
j_filloval(canvas,50,50,40,20)
j_drawstring(canvas,0,105,"FillOval")
j_translate(canvas,100,0)
j_fillarc(canvas,50,50,40,30,113,210)
j_drawstring(canvas,0,105,"FillArc")
while(j_nextaction()<>jframe)
wend
j_quit()
rem Example graphic.bas
YABASIC dim x(9)
YABASIC dim y(9)
YABASIC for i = 0 to 9
YABASIC read x(i)
YABASIC read y(i)
YABASIC next i
SCRIBA import japi.bas
SCRIBA for i = 0 to 9
SCRIBA x[i]=(i+1)*10
SCRIBA if(even(i)) then
SCRIBA y[i]=10
SCRIBA else
SCRIBA y[i]=90
SCRIBA endif
SCRIBA next i
if( j_start() = J_FALSE ) then
print "can't connect to JAPI server"
end
endif
jframe = j_frame("Graphik Primitiven")
j_setsize(jframe,720,260)
canvas = j_canvas(jframe,700,230)
j_setpos(canvas,10,30)
j_show(jframe)
j_pack(jframe)
j_setnamedcolor(canvas,J_BLUE)
rem Normal
j_translate(canvas,10,10)
j_drawline(canvas,10,10,90,90)
j_drawstring(canvas,0,105,"Line")
j_translate(canvas,100,0)
SCRIBA j_drawpolygon(canvas,10,x,y)
YABASIC j_drawpolygon(canvas,10,x(),y())
j_drawstring(canvas,0,105,"Polygon")
j_translate(canvas,100,0)
j_drawrect(canvas,10,10,80,80)
j_drawstring(canvas,0,105,"Rectangle")
j_translate(canvas,100,0)
j_drawroundrect(canvas,10,10,80,80,20,20)
j_drawstring(canvas,0,105,"RoundRect")
j_translate(canvas,100,0)
j_drawcircle(canvas,50,50,40)
j_drawstring(canvas,0,105,"Circle")
print "6"
j_translate(canvas,100,0)
j_drawoval(canvas,50,50,40,20)
j_drawstring(canvas,0,105,"Oval")
j_translate(canvas,100,0)
j_drawarc(canvas,50,50,40,30,113,210)
j_drawstring(canvas,0,105,"Arc")
rem Filled
j_translate(canvas,-600,100)
SCRIBA j_drawpolyline(canvas,10,x,y)
YABASIC j_drawpolyline(canvas,10,x(),y())
j_drawstring(canvas,0,105,"Polyline")
j_translate(canvas,100,0)
SCRIBA j_fillpolygon(canvas,10,x,y)
YABASIC j_fillpolygon(canvas,10,x(),y())
j_drawstring(canvas,0,105,"FillPolygon")
j_translate(canvas,100,0)
j_fillrect(canvas,10,10,80,80)
j_drawstring(canvas,0,105,"FillRectangle")
j_translate(canvas,100,0)
j_fillroundrect(canvas,10,10,80,80,20,20)
j_drawstring(canvas,0,105,"FillRoundRect")
j_translate(canvas,100,0)
j_fillcircle(canvas,50,50,40)
j_drawstring(canvas,0,105,"FillCircle")
j_translate(canvas,100,0)
j_filloval(canvas,50,50,40,20)
j_drawstring(canvas,0,105,"FillOval")
j_translate(canvas,100,0)
j_fillarc(canvas,50,50,40,30,113,210)
j_drawstring(canvas,0,105,"FillArc")
while(j_nextaction()<>jframe)
wend
j_quit()
end
YABASIC data 10,10,20,90,30,10,40,90,50,10,60,90,70,10,80,90,90,10,100,90
' graphic.o2bas
extern lib "japi.dll" cdecl
include once "japi.h"
end extern
#lookahead
if( j_start() = J_FALSE ) then
print "can't connect to JAPI server"
end
endif
sys i
indexbase 1
sys x[10]
sys y[10]
for i = 1 to 10
x[ i]=i*10
'if mod(i-1,1)<>0 then
if i and 1 'odd
y[ i]=10
else
y[ i]=90
end if
next
sys jframe = j_frame("OxygenBasic JAPI 2.0")
j_setsize(jframe,720,260)
sys canvas = j_canvas(jframe,700,230)
j_setpos(canvas,10,30)
j_show(jframe)
j_pack(jframe)
j_setnamedcolor(canvas,J_BLUE)
j_translate(canvas,10,10)
j_drawline(canvas,10,10,90,90)
j_drawstring(canvas,0,105,"Line")
j_translate(canvas,100,0)
j_drawpolygon(canvas,10,x[],y[])
j_drawstring(canvas,0,105,"Polygon")
j_translate(canvas,100,0)
j_drawrect(canvas,10,10,80,80)
j_drawstring(canvas,0,105,"Rectangle")
j_translate(canvas,100,0)
j_drawroundrect(canvas,10,10,80,80,20,20)
j_drawstring(canvas,0,105,"RoundRect")
j_translate(canvas,100,0)
j_drawcircle(canvas,50,50,40)
j_drawstring(canvas,0,105,"Circle")
j_translate(canvas,100,0)
j_drawoval(canvas,50,50,40,20)
j_drawstring(canvas,0,105,"Oval")
j_translate(canvas,100,0)
j_drawarc(canvas,50,50,40,30,113,210)
j_drawstring(canvas,0,105,"Arc")
j_translate(canvas,-600,100)
j_drawpolyline(canvas,10,x[],y[])
j_drawstring(canvas,0,105,"Polyline")
j_translate(canvas,100,0)
j_fillpolygon(canvas,10,x[],y[])
j_drawstring(canvas,0,105,"FillPolygon")
j_translate(canvas,100,0)
j_fillrect(canvas,10,10,80,80)
j_drawstring(canvas,0,105,"FillRectangle")
j_translate(canvas,100,0)
j_fillroundrect(canvas,10,10,80,80,20,20)
j_drawstring(canvas,0,105,"FillRoundRect")
j_translate(canvas,100,0)
j_fillcircle(canvas,50,50,40)
j_drawstring(canvas,0,105,"FillCircle")
j_translate(canvas,100,0)
j_filloval(canvas,50,50,40,20)
j_drawstring(canvas,0,105,"FillOval")
j_translate(canvas,100,0)
j_fillarc(canvas,50,50,40,30,113,210)
j_drawstring(canvas,0,105,"FillArc")
while(j_nextaction()<>jframe)
wend
j_quit()
indexbase 1
sys x[10]
sys y[10]
for i = 1 to 10
x[ i]=i*10
' if mod(i-1,1)<>0 then
if i and 1
y[ i]=90
else
y[ i]=10
end if
next