rem Memblock Functionality

rem Standard Setup Code for all examples
sync on : sync rate 0 : backdrop off
set text font "arial" : set text size 16
set text to bold : set text transparent

rem Set values
SoundNumber=1+rnd(3)
ImageNumber=1+rnd(3)
BitmapNumber=1+rnd(3)
MeshNumber=1+rnd(3)

rem Load media
load sound "gun.wav",SoundNumber
load image "face.bmp",ImageNumber
load bitmap "face.bmp",BitmapNumber
load mesh "mesh.x",MeshNumber

rem Main loop
do

rem Produce random values
MemblockNumber=1+rnd(254)
MemblockTo=1+rnd(254)
FromPos=rnd(100)
ToPos=FromPos+1+rnd(50)
SizeInBytes=202+rnd(10240)
TenBytes=10
ByteValue=rnd(255)
WordValue=rnd(65535)
DWORDValue=rnd(22000000)
FloatValue=rnd(10000)/100.0

rem Try each command at random
r=rnd(4)
if MEMBLOCK EXIST(MemblockNumber)=0
 if r=0 then MAKE MEMBLOCK MemblockNumber, SizeInBytes
 if r=1 then MAKE MEMBLOCK FROM SOUND MemblockNumber, SoundNumber
 if r=2 then MAKE MEMBLOCK FROM IMAGE MemblockNumber, ImageNumber
 if r=3 then MAKE MEMBLOCK FROM BITMAP MemblockNumber, BitmapNumber
 if r=4 then MAKE MEMBLOCK FROM MESH MemblockNumber, MeshNumber
endif
if MEMBLOCK EXIST(MemblockNumber)=1
 if r=1 then DELETE SOUND SoundNumber
 if r=2 then DELETE IMAGE ImageNumber
 if r=3 then DELETE BITMAP BitmapNumber
 if r=4 then DELETE MESH MeshNumber
endif
if MEMBLOCK EXIST(MemblockNumber)=1
 if r=0 then WRITE MEMBLOCK BYTE MemblockNumber, ToPos, ByteValue
 if r=0 then WRITE MEMBLOCK WORD MemblockNumber, ToPos, WordValue
 if r=0 then WRITE MEMBLOCK DWORD MemblockNumber, ToPos, DWORDValue
 if r=0 then WRITE MEMBLOCK FLOAT MemblockNumber, ToPos, FloatValue
 if r=1 then MAKE SOUND FROM MEMBLOCK SoundNumber, MemblockNumber
 if r=2 then MAKE IMAGE FROM MEMBLOCK ImageNumber, MemblockNumber
 if r=3 then MAKE BITMAP FROM MEMBLOCK BitmapNumber, MemblockNumber
 if r=4 then MAKE MESH FROM MEMBLOCK MeshNumber, MemblockNumber
 if r=4 then CHANGE MESH FROM MEMBLOCK MeshNumber, MemblockNumber
endif
if MEMBLOCK EXIST(MemblockNumber)=1 and MEMBLOCK EXIST(MemblockTo)=1
 if rnd(5)=1 then COPY MEMBLOCK MemblockNumber, MemblockTo, FromPos, ToPos, TenBytes
endif

rem Display data
cls
print "MEMBLOCK EXPRESSION DATA"
print
print "memblock:";MemblockNumber
print "exist:";MEMBLOCK EXIST(MemblockNumber)
if MEMBLOCK EXIST(MemblockNumber)=1
 print "ptr:";GET MEMBLOCK PTR(MemblockNumber)
 print "size:";GET MEMBLOCK SIZE(MemblockNumber)
 print "byte:";MEMBLOCK BYTE(MemblockNumber, FromPos)
 print "word:";MEMBLOCK WORD(MemblockNumber, FromPos)
 print "dword:";MEMBLOCK DWORD(MemblockNumber, FromPos)
 print "float:";MEMBLOCK FLOAT(MemblockNumber, FromPos)
endif

rem Show/play media
if MEMBLOCK EXIST(MemblockNumber)=1
 if r=1 then PLAY SOUND SoundNumber : SLEEP 100
 if r=2 then PASTE IMAGE ImageNumber,0,0 : SLEEP 100
 if r=3 then COPY BITMAP BitmapNumber,0 : SLEEP 100
 if r=4 then MAKE OBJECT 1,MeshNumber,0 : SYNC : DELETE OBJECT 1 : SLEEP 100
endif

rem Delete memblocks
if MEMBLOCK EXIST(MemblockNumber)=1 then DELETE MEMBLOCK MemblockNumber
if MEMBLOCK EXIST(MemblockTo)=1 then DELETE MEMBLOCK MemblockTo

rem Update screen
sync

rem End loop
loop