If i create a Screen from the main file, how can i make a DLL send commands to that new Screen and not to the original console screen?
For example, the Print command from the DLL goes to the console screen, not to the new Screen.
Thanks for any help!
Send commands from DLL to new Screen created by main file
Re: Send commands from DLL to new Screen created by main fil
Hello fert, welcome to the forum.
In pure FreeBASIC:
- You must create the new graphic screen from the DLL ('Screen/ScreenRes' must be executed from a procedure of the DLL).
- Each DLL can process only its own graphic screen (created by it).
See examples at: Create DLL, from http://www.freebasic.net/forum/viewtopi ... 74#p181774
In pure FreeBASIC:
- You must create the new graphic screen from the DLL ('Screen/ScreenRes' must be executed from a procedure of the DLL).
- Each DLL can process only its own graphic screen (created by it).
See examples at: Create DLL, from http://www.freebasic.net/forum/viewtopi ... 74#p181774
Re: Send commands from DLL to new Screen created by main fil
That's the answer that i was looking for, many thanks
I see i can do like: Main => Multiples DLL's so i can control each screen of each DLL from the main code. I was wondering if i could do the 'reverse', like: Multiples DLL => Main file , so i could use the various DLL's to send commands to a single screen created by the Main file. That would be the solution but it seems that it is not possible. Anyway, i was looking at the FB Help and find out that simply modularizating the code into several files and then compiling like: " fbc main.bas functions.bas subs.bas " would be enough to better organize the code, that was what i was looking for. Thanks again
I see i can do like: Main => Multiples DLL's so i can control each screen of each DLL from the main code. I was wondering if i could do the 'reverse', like: Multiples DLL => Main file , so i could use the various DLL's to send commands to a single screen created by the Main file. That would be the solution but it seems that it is not possible. Anyway, i was looking at the FB Help and find out that simply modularizating the code into several files and then compiling like: " fbc main.bas functions.bas subs.bas " would be enough to better organize the code, that was what i was looking for. Thanks again
Re: Send commands from DLL to new Screen created by main fil
Also check #INCLUDE [ONCE].fert wrote:... and find out that simply modularizating the code into several files and then compiling like: " fbc main.bas functions.bas subs.bas " would be enough to better organize the code, that was what i was looking for.
At least you can create an image in the main file and draw on it from several modules. Then PUT it on the screen in the main modul. It's a bit tricky and each dll-modul needs its own fbgfx graphic library. (You should have good reasons to go that way, ie a plugin system.)fert wrote:I was wondering if i could do the 'reverse', like: Multiples DLL => Main file , so i could use the various DLL's to send commands to a single screen created by the Main file.
Re: Send commands from DLL to new Screen created by main fil
A couple of points with fb .9
You must make a windowtitle for each .dll.
But it can be overwritten in the main module.
You cannot move an openGL screen (bug)
Here are some updated .dll's with images incorporated, one way by put, the other way by get>
screen1.bas
screen2.bas
screen3.bas
glscreendll.bas
declarations.bas
and finally the test code,test.bas
Pop them all into a temporary folder and compile the screens as .dll
Then run the test file.
Just press esc to end the run.
You must make a windowtitle for each .dll.
But it can be overwritten in the main module.
You cannot move an openGL screen (bug)
Here are some updated .dll's with images incorporated, one way by put, the other way by get>
screen1.bas
Code: Select all
'DLL file
' screen1.bas
' to compile with -dll to get screen1.dll
'____________________________________________________________
sub windowtitle1(s as string) export
windowtitle s
end sub
Sub screen1 (Byval X As Integer, Byval Y As Integer,xres as integer,yres as integer,d as integer=32) EXPORT
windowtitle "Screen 1"
Screenres xres,yres,d
SCREENCONTROL(100, X, Y)
End Sub
sub put1(im as any pointer,x as integer,y as integer) export
put(x,y),im,pset
end sub
function get1(x as integer,y as integer) as any pointer export
dim as integer w,h
screeninfo w,h
dim as any pointer i=imagecreate(w,h)
get (1,1)-(x-1,y-1),i
return i
end function
'
sub colour1(c1 as uinteger) export
color ,c1
end sub
sub paint1(x as integer,y as integer,c1 as uinteger,c2 as uinteger) export
paint(x,y),c1,c2
end sub
Sub Print1 (Byref text As String,indicator as string="") EXPORT
if indicator="," then Print text,:exit sub
if indicator=";" then print text;:exit sub
print text
End Sub
sub line1(x1 as double,y1 as double,x2 as double,y2 as double,c as uinteger,f as string="",im as any pointer=0) EXPORT
if f="" then line im,(x1,y1)-(x2,y2),c
if f="b" then line im,(x1,y1)-(x2,y2),c,b
if f="bf" then line im,(x1,y1)-(x2,y2),c,bf
end sub
sub circle1(x1 as double,_
y1 as double,_
rad as double,_
c as uinteger,_
arc1 as double=0,_
arc2 as double=6.28318,_
aspect as double=1,_
fill as string="",_
im as any pointer=0) EXPORT
if fill="" then
circle im,(x1,y1),rad,c,arc1,arc2,aspect
else
circle im,(x1,y1),rad,c,,,aspect,f
end if
end sub
sub pset1(x1 as double,y1 as double,c as uinteger,im as any pointer=0) EXPORT
pset im,(x1,y1),c
end sub
sub clearscreen1 export
cls
end sub
sub endkey1 export
if inkey=chr(27) then end
end sub
sub screenlock1 export
screenlock
end sub
sub screenunlock1 export
screenunlock
end sub
sub getmouse1(byref mx as integer,byref my as integer,byref mw as integer=0,byref mb as integer=0) export
getmouse(mx,my,mw,mb)
end sub
sub locate1(x as integer,y as integer) export
locate x,y
end sub
Code: Select all
'DLL file
' screen2.bas
' to compile with -dll to get screen2.dll
'____________________________________________________________
sub windowtitle2(s as string) export
windowtitle s
end sub
Sub screen2 (Byval X As Integer, Byval Y As Integer,xres as integer,yres as integer,d as integer=32) EXPORT
windowtitle "Screen 2"
Screenres xres,yres,d
SCREENCONTROL(100, X, Y)
End Sub
sub put2(im as any pointer,x as integer,y as integer) export
put(x,y),im,pset
end sub
function get2(x as integer,y as integer) as any pointer export
dim as integer w,h
screeninfo w,h
dim as any pointer i=imagecreate(w,h)
get (1,1)-(x-1,y-1),i
return i
end function
sub colour2(c1 as uinteger) export
color ,c1
end sub
sub paint2(x as integer,y as integer,c1 as uinteger,c2 as uinteger) export
paint(x,y),c1,c2
end sub
Sub Print2 (Byref text As String,indicator as string="") EXPORT
if indicator="," then Print text,:exit sub
if indicator=";" then print text;:exit sub
print text
End Sub
sub line2(x1 as double,y1 as double,x2 as double,y2 as double,c as uinteger,f as string="",im as any pointer=0) EXPORT
if f="" then line im,(x1,y1)-(x2,y2),c
if f="b" then line im,(x1,y1)-(x2,y2),c,b
if f="bf" then line im,(x1,y1)-(x2,y2),c,bf
end sub
sub circle2(x1 as double,_
y1 as double,_
rad as double,_
c as uinteger,_
arc1 as double=0,_
arc2 as double=6.28318,_
aspect as double=1,_
fill as string="",_
im as any pointer=0) EXPORT
if fill="" then
circle im,(x1,y1),rad,c,arc1,arc2,aspect
else
circle im,(x1,y1),rad,c,,,aspect,f
end if
end sub
sub pset2(x1 as double,y1 as double,c as uinteger,im as any pointer=0) EXPORT
pset im,(x1,y1),c
end sub
sub clearscreen2 export
cls
end sub
sub endkey2 export
if inkey=chr(27) then end
end sub
sub screenlock2 export
screenlock
end sub
sub screenunlock2 export
screenunlock
end sub
sub getmouse2(byref mx as integer,byref my as integer,byref mw as integer=0,byref mb as integer=0) export
getmouse(mx,my,mw,mb)
end sub
sub locate2(x as integer,y as integer) export
locate x,y
end sub
Code: Select all
'DLL file
' screen3.bas
' to compile with -dll to get screen3.dll
'____________________________________________________________
sub windowtitle3(s as string) export
windowtitle s
end sub
Sub screen3 (Byval X As Integer, Byval Y As Integer,xres as integer,yres as integer,d as integer=32) EXPORT
windowtitle "Screen 3"
Screenres xres,yres,d
SCREENCONTROL(100, X, Y)
End Sub
sub put3(im as any pointer,x as integer,y as integer) export
put(x,y),im,pset
end sub
function get3(x as integer,y as integer) as any pointer export
dim as integer w,h
screeninfo w,h
dim as any pointer i=imagecreate(w,h)
get (1,1)-(x-1,y-1),i
return i
end function
'
sub colour3(c1 as uinteger) export
color ,c1
end sub
sub paint3(x as integer,y as integer,c1 as uinteger,c2 as uinteger) export
paint(x,y),c1,c2
end sub
Sub Print3 (Byref text As String,indicator as string="") EXPORT
if indicator="," then Print text,:exit sub
if indicator=";" then print text;:exit sub
print text
End Sub
sub line3(x1 as double,y1 as double,x2 as double,y2 as double,c as uinteger,f as string="",im as any pointer=0) EXPORT
if f="" then line im,(x1,y1)-(x2,y2),c
if f="b" then line im,(x1,y1)-(x2,y2),c,b
if f="bf" then line im,(x1,y1)-(x2,y2),c,bf
end sub
sub circle3(x1 as double,_
y1 as double,_
rad as double,_
c as uinteger,_
arc1 as double=0,_
arc2 as double=6.28318,_
aspect as double=1,_
fill as string="",_
im as any pointer=0) EXPORT
if fill="" then
circle im,(x1,y1),rad,c,arc1,arc2,aspect
else
circle im,(x1,y1),rad,c,,,aspect,f
end if
end sub
sub pset3(x1 as double,y1 as double,c as uinteger,im as any pointer=0) EXPORT
pset im,(x1,y1),c
end sub
sub clearscreen3 export
cls
end sub
sub endkey3 export
if inkey=chr(27) then end
end sub
sub screenlock3 export
screenlock
end sub
sub screenunlock3 export
screenunlock
end sub
sub getmouse3(byref mx as integer,byref my as integer,byref mw as integer=0,byref mb as integer=0) export
getmouse(mx,my,mw,mb)
end sub
sub locate3(x as integer,y as integer) export
locate x,y
end sub
Code: Select all
'glscreendll.bas
'compile with -dll switch to get glscreendll.dll
#include "gl/glu.bi"
sub glwindowtitle(s as string) export
windowtitle s
end sub
Sub glscreen (Byval X As Integer, Byval Y As Integer,xres as integer,yres as integer,d as integer=32) EXPORT
windowtitle "OPENGL"
Screenres xres,yres,d,,2
SCREENCONTROL(100, X, Y)
End Sub
sub Glsetcolor(r as single,g as single,b as single,a as single) export
glcolor4f(r,g,b,a)
end sub
sub glLine(x1 as integer,y1 as integer,x2 as integer,y2 as integer, th as integer) export
glLineWidth th
glbegin gl_lines
glvertex2f(x1,y1)
glvertex2f(x2,y2)
glend
end sub
sub glsetortho(x1 as integer,x2 as integer,y1 as integer,y2 as integer,z1 as integer,z2 as integer) export
glortho(x1,x2,y1,y2,z1,z2)
glDisable (GL_DEPTH_TEST)
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)
glEnable (GL_BLEND)
glEnable (GL_LINE_SMOOTH)
end sub
sub glclearbuffer() export
glClear (GL_COLOR_BUFFER_BIT)
end sub
sub glflip export
flip
end sub
sub glpolygonfill(x as integer,y as integer,rx as integer,ry as integer,numsides as integer) export
Var pi2 = 8*Atn(1),st=pi2/(numsides)
glend
glBegin GL_TRIANGLE_FAN
For a As Single=0 To pi2 Step st
glVertex2f (x)+Cos(a)*(rx),(y)+Sin(a)*(ry)
Next
glEnd
end sub
sub glpolygon(x as integer,y as integer,rx as integer,ry as integer,numsides as integer,thickness as integer) export
Var pi2 = 8*Atn(1),st=pi2/(numsides)
glend
glLineWidth(thickness)
glBegin GL_LINES
For a As Single=0 To pi2 Step st
glVertex2f (x)+Cos(a)*(rx),(y)+Sin(a)*(ry)
glVertex2f (x)+Cos(a+st)*(rx),(y)+Sin(a+st)*(ry)
Next
glEnd
end sub
sub gldrawline(x as integer,y as integer,angle as double,length as double,byref x2 as double=0,byref y2 as double=0) export
angle=angle*.0174532925199433 '=4*atn(1)/180
x2=x+length*cos(angle)
y2=y-length*sin(angle)
glend
glLineWidth(1)
glbegin gl_lines
glvertex2f(x,y)
glvertex2f(x2,y2)
glend
end sub
sub endkeygl export
if inkey=chr(27) then end
end sub
Code: Select all
'DECLARATIONS FOR THE DLL'S
'declarations.bas
'==============================================================================
declare sub windowtitle1(s as string)
declare Sub screen1 (Byval X As Integer, Byval Y As Integer,xres as integer,yres as integer,d as integer=32)
declare sub put1(im as any pointer,x as integer,y as integer)
'======================
declare function get1(x as integer,y as integer) as any pointer
'======================
declare sub colour1(c1 as uinteger)
declare sub paint1(x as integer,y as integer,c1 as uinteger,c2 as uinteger)
Declare Sub Print1 (Byref text As String,indicator as string="")
declare sub line1(x1 as double,y1 as double,x2 as double,y2 as double,c as uinteger,f as string="",im as any pointer=0)
declare sub circle1(x1 as double,_
y1 as double,_
rad as double,_
c as uinteger,_
arc1 as double=0,_
arc2 as double= 6.28318,_
aspect as double=1,_
fill as string="",_
im as any pointer=0)
declare sub pset1(x1 as double,x2 as double,c as uinteger,im as any pointer=0)
declare sub clearscreen1
declare sub endkey1
declare sub screenlock1
declare sub screenunlock1
declare sub getmouse1(byref mx as integer,byref my as integer,byref mw as integer=0,byref mb as integer=0)
declare sub locate1(x as integer,y as integer)
'=====================================================================
declare sub windowtitle2(s as string)
declare Sub screen2 (Byval X As Integer, Byval Y As Integer,xres as integer,yres as integer,d as integer=32)
declare sub put2(im as any pointer,x as integer,y as integer)
'======================
declare function get2(x as integer,y as integer) as any pointer
'======================
declare sub colour2(c1 as uinteger)
declare sub paint2(x as integer,y as integer,c1 as uinteger,c2 as uinteger)
Declare Sub Print2 (Byref text As String,indicator as string="")
declare sub line2(x1 as double,y1 as double,x2 as double,y2 as double,c as uinteger,f as string="",im as any pointer=0)
declare sub circle2(x1 as double,_
y1 as double,_
rad as double,_
c as uinteger,_
arc1 as double=0,_
arc2 as double= 6.28318,_
aspect as double=1,_
fill as string="",_
im as any pointer=0)
declare sub pset2(x1 as double,x2 as double,c as uinteger,im as any pointer=0)
declare sub clearscreen2
declare sub endkey2
declare sub screenlock2
declare sub screenunlock2
declare sub getmouse2(byref mx as integer,byref my as integer,byref mw as integer=0,byref mb as integer=0)
declare sub locate2(x as integer,y as integer)
'_____________________________________________________________
declare sub windowtitle3(s as string)
declare Sub screen3 (Byval X As Integer, Byval Y As Integer,xres as integer,yres as integer,d as integer=32)
declare sub put3(im as any pointer,x as integer,y as integer)
'======================
declare function get3(x as integer,y as integer) as any pointer
'======================
declare sub colour3(c1 as uinteger)
declare sub paint3(x as integer,y as integer,c1 as uinteger,c2 as uinteger)
Declare Sub Print3 (Byref text As String,indicator as string="")
declare sub line3(x1 as double,y1 as double,x2 as double,y2 as double,c as uinteger,f as string="",im as any pointer=0)
declare sub circle3(x1 as double,_
y1 as double,_
rad as double,_
c as uinteger,_
arc1 as double=0,_
arc2 as double= 6.28318,_
aspect as double=1,_
fill as string="",_
im as any pointer=0)
declare sub pset3(x1 as double,x2 as double,c as uinteger,im as any pointer=0)
declare sub clearscreen3
declare sub endkey3
declare sub screenlock3
declare sub screenunlock3
declare sub getmouse3(byref mx as integer,byref my as integer,byref mw as integer=0,byref mb as integer=0)
declare sub locate3(x as integer,y as integer)
'opengl declarations
declare Sub glscreen (Byval X As Integer, Byval Y As Integer,xres as integer,yres as integer,d as integer=32)
declare sub glsetcolor(r as single,g as single,b as single,a as single)
declare sub glLine(x1 as integer,y1 as integer,x2 as integer,y2 as integer, th as integer)
declare sub glsetortho(x1 as integer,x2 as integer,y1 as integer,y2 as integer,z1 as integer,z2 as integer)
declare sub glclearbuffer()
declare sub glflip
declare sub glpolygonfill(x as integer,y as integer,rx as integer,ry as integer,numsides as integer)
declare sub glpolygon(x as integer,y as integer,rx as integer,ry as integer,numsides as integer,thickness as integer)
declare sub glwindowtitle(s as string)
declare sub gldrawline(x as integer,y as integer,angle as double,length as double,byref x2 as double=0,byref y2 as double=0)
declare sub endkeygl
' ================= END DECLARATIONS =================================
Code: Select all
'test.bas
'=============== EXAMPLE ====================================
#include "declarations.bas"
'LOAD THE DLL'S
#inclib "screen1"
#inclib "screen2"
#inclib "screen3"
#inclib "glscreendll"
'local subs in this code
declare Sub ball1()
declare Sub ball2(byref xpos as integer,byref ypos as integer)
Function framecounter() As Integer
Var t1=Timer,t2=t1
Static As Double t3,frames,answer
frames=frames+1
If (t2-t3)>=1 Then
t3=t2
answer=frames
frames=0
End If
Return answer
End Function
'local variables in this code
Dim Shared As Double dx=2,dy=2
dim shared as double dx2=4,dy2=3
dim shared as integer xres3,yres3, xres2,yres2,xres1,yres1
screenres 800,600 'main screen
xres1=500
yres1=400
screen1(10,10,xres1,yres1,8) 'set up screen1 at 10,10,screenres 500,400,8
windowtitle1("win 1")
xres2=400
yres2=420
screen2(550,10,xres2,yres2,32)' set up screen2 at 550,10,screenres 400,420,32
windowtitle2("win 2")
xres3=300
yres3=200
screen3(30,300,xres3,yres3,32)
windowtitle3("win 3")
'colour two of the screens
colour1(4)
colour2(rgb(0,0,50))
'-------------OpenGL variables ----------
glscreen (500,300,400,400)
glsetortho(0,400,400,0,-1,1)
glwindowtitle("OpenGL")
dim as double x1,y1,inc
x1=400/2
y1=400/2
dim as any ptr image32=imagecreate(100,100,,32)
dim as any ptr image8=imagecreate(100,100,,8)
dim as any ptr mainimage=imagecreate(xres1,yres1,8)
'create images
for x as integer=0 to 100
for y as integer=0 to 100
pset image8,(x,y),x or y
next y
next x
for x as integer=0 to 100
for y as integer=0 to 100
pset image32,(x,y),rgb(x,x or y,y)
next y
next x
dim as integer imageX,imageY 'for bouncing box
'get image of screen 1 to set on main screen
screenlock1
line1(20,20,480,380,3,"b") 'the box, screen1
paint1(1,1,1,3) 'paint round the box
paint1(xres1/2,yres1/2,4,3)
put1(image8,50,50) '8 bit image
locate1 5,2
print1 "SCREEN1.dll"
print1 str(xres1)+" "+str(yres1)
screenunlock1
mainimage=get1(xres1,yres1)
'------------------------------
Do
screenlock 'main screen(800 by 600)
cls
put (150,100),mainimage
locate 5,10
print "MAIN SCREEN with image of screen1"
screenunlock
sleep 1,1
'_____________________________________
Screenlock1 'screen 1
Clearscreen1
line1(20,20,480,380,3,"b") 'the box, screen1
paint1(1,1,1,3) 'paint round the box
put1(image8,50,50) '8 bit image
locate1 5,2
print1 "SCREEN1.dll"
print1 str(xres1)+" "+str(yres1)
ball1()
screenunlock1
'mainimage=get1(xres1,yres1)
endkey1
sleep 1,1
'__________________________________________
screenlock2 'screen 2
clearscreen2
put2(image32,imageX,imageY)'32 bit image in motion
locate2 2,2
print2 "SCREEN2.dll"
print2 str(xres2)+" "+str(yres2)
ball2(imageX,imageY)
Screenunlock2
endkey2
Sleep 1,1
'---------------------------------------
screenlock3 'screen 3
clearscreen3
put3(image32,0,0)'fixed 32 bit image
locate3 2,15
print3 "SCREEN3.dll"
locate3 4,15
print3 str(xres3)+" "+str(yres3)
locate3 6,15
print3 "System FPS = ",";"
print3 str(framecounter)
Screenunlock3
endkey3
Sleep 1,1
'----------------------------- openglscreen
inc=inc+.1
glclearbuffer()
glsetcolor(1,1,0,1)
glline(20,20,50,50,4)
glsetcolor(.5,.5,.5,.5)
glpolygonfill(100,100,100,90,50)
glsetcolor(0,0,1,1)
glpolygon(200,200,50,50,6,3)
glsetcolor(0,100,0,1)
for angle as single=inc to 360-6+inc step 6
gldrawline(x1,y1,angle,190)
next angle
glflip
endkeygl
Loop until inkey=chr(27)
imagedestroy image8
imagedestroy image32
imagedestroy mainimage
end
Sub ball1()
Static As Double x=100
static as double y=100
x=x+dx
y=y+dy
Circle1(x,y,10,3,,,,"f")
Circle1(x,y,10,0,,,,"")
If y>yres1-30 Then dy= -dy
If y<30 Then dy= -dy
If x>xres1-30 Then dx= -dx
If x < 30 Then dx= -dx
End Sub
Sub ball2(byref xpos as integer,byref ypos as integer)
Static As Double x=100
static as double y=100
x=x+dx2
y=y+dy2
'Circle2(x,y,10,rgb(200,100,0),,,,"f")
'Circle2(x,y,10,rgb(200,200,200),,,,"")
xpos=x-50:ypos=y-50
If y>yres2-50 Then dy2= -dy2
If y<50 Then dy2= -dy2
If x>xres2-50 Then dx2= -dx2
If x < 50 Then dx2= -dx2
End Sub
Then run the test file.
Just press esc to end the run.
Re: Send commands from DLL to new Screen created by main fil
@dodicat,
you needn't create a real (visible) SCREEN / window in the dll, its enought to initialize libfbgfx. Then create an IMAGE in the main modul and exchange the IMAGE PTR to the SUBs / FUNCTIONs in the dll.
dll.bas (compile with fbc -dylib dll.bas)
main.bas
you needn't create a real (visible) SCREEN / window in the dll, its enought to initialize libfbgfx. Then create an IMAGE in the main modul and exchange the IMAGE PTR to the SUBs / FUNCTIONs in the dll.
dll.bas (compile with fbc -dylib dll.bas)
Code: Select all
' dll.bas
' just to use the GFX_NULL definition
#INCLUDE ONCE "fbgfx.bi"
' unvisible SCREEN to initialize libfbgfx
SCREENRES(8, 8, 32, 0, FB.GFX_NULL)
SUB draw_line CDECL ALIAS "draw_line" (BYVAL Buffer AS ANY PTR) EXPORT
LINE Buffer, (20, 20)-(300, 180)
END SUB
Code: Select all
'' main.bas
CONST scrw = 320, scrh = 200
#IFDEF __FB_UNIX__
VAR dylib = DYLIBLOAD("dll.so")
#ELSE
VAR dylib = DYLIBLOAD("dll.dll")
#ENDIF
IF 0 = dylib THEN ?"Failed to load library." : END 1
DIM draw_line AS SUB CDECL(BYVAL AS ANY PTR) = DYLIBSYMBOL(dylib, "draw_line")
IF 0 = draw_line THEN
? "Could not retrieve the draw_line() function's address"
ELSE
SCREENRES(scrw, scrh, 32) '' here we make the visible SCREEN
VAR img = IMAGECREATE(scrw, scrh, , 32)
IF 0 = img THEN
? "Could not create image"
ELSE
draw_line(img) '' draw from dll on the IMAGE
PUT(0, 0), img '' and PUT it on SCREEN
SLEEP
IMAGEDESTROY(img)
END IF
END IF