.lib "Kernel32.dll";Win32 Decls, Memory Management FunctionsApi_RtlMoveToBank(Destination*,Source,Length):"RtlMoveMemory"Api_RtlMoveToMemory(Destination,Source*,Length):"RtlMoveMemory";Api_RtlFillMemory(Destination,Length,Fill):"RtlFillMemory";Api_RtlZeroMemory(Destination,Length):"RtlZeroMemory";PeekPoke Module DeclsPeekB%(address)PeekS%(address)PeekI%(address)PeekF#(address)PokeB(address,value)PokeS(address,value)PokeI(address,value)PokeF(address,value#)MemoryLog(address,ByteLength,filename$)
;PeekPoke Example, for Blitz3DInclude "peekpoke.bb" ;PeekPoke ModuleGraphics 640,480,0,2SetBuffer BackBuffer()load=0 ;Flag to load or create an imageIf load=1 image=LoadImage("test.bmp")Else width=100 height=63 frames=1 image=CreateImage(width,height,frames)EndIfBufferList=PeekI(image+4) ;pImageBufferListBufferListEnd=PeekI(image+8) ;pImageBufferListEndnumframes=(BufferListEnd-BufferList)/4 ;Number of image framesbuffer=ImageBuffer(image,0)pImageBuffer=PeekI(BufferList+(0*4)) ;pImageBuffer[frame]LockBuffer buffer ;LockBuffer to return a pointer to the pixelsUnlockBuffer bufferDDSurface7=PeekI(buffer+12) ;pImageDDSurface7PixelData=PeekI(buffer+72) ;pImagePixelDataWidthImage=PeekI(buffer+92) ;ImageWidthHeightImage=PeekI(buffer+96) ;ImageHeightDrawImageText(Str(0),image,0)If GraphicsDepth()=32 pitch=(((width*8)+127)/128)*16 ;16 bit-aligned For iy=1 To height-2 offset=(pitch*iy) Shl 2 For ix=1 To width-2 pixel=BGRA(Rand(255),Rand(255),Rand(255)) PokeI(PixelData+offset+(ix Shl 2),pixel) Next NextElseIf GraphicsDepth()=16 pitch=(((width*8)+255)/256)*32 ;32-bit aligned For iy=1 To height-2 offset=(pitch*iy) Shl 1 For ix=1 To width-2 pixel=BGR16(Rand(255),Rand(255),Rand(255)) PokeS(PixelData+offset+(ix Shl 1),pixel) Next NextEndIfWhile Not KeyDown(1) ;Esc key Cls Text 0,0,"width="+width+" height="+height+" frames="+frames Text 0,12,"image="+image Text 0,36,"BufferList="+BufferList Text 0,48,"BufferListEnd="+BufferListEnd Text 0,60,"numframes="+numframes Text 0,84,"buffer="+buffer Text 0,96,"pImageBuffer="+pImageBuffer Text 0,120,"DDSurface7="+DDSurface7 Text 0,132,"PixelData="+PixelData Text 0,144,"WidthImage="+WidthImage Text 0,156,"HeightImage="+HeightImage Text 0,168,"pitch="+pitch DrawImage image,MouseX()-width,MouseY()-height FlipWendEndFunction BGRA(blue,green,red,alpha=$FF) ;Converts BGRA to a 32-bit value, alpha is optional Return ((alpha Shl 24) Or (red Shl 16) Or (green Shl 8) Or blue)End FunctionFunction BGR16(blue,green,red) ;Converts BGR to a 16-bit value Return ((red Shr 3 Shl 11) Or (green Shr 2 Shl 5) Or (blue Shr 3))End FunctionFunction DrawImageText(textstr$,image,frame=0) ;Draw frame number on image Local buffer=GraphicsBuffer() SetBuffer ImageBuffer(image,frame) ClsColor 255,255,255 : Cls Color 255,0,0 : Text 0,0,textstr$ ClsColor 0,0,0 : Color 255,255,255 SetBuffer bufferEnd Function
;PeekPoke Example, for BlitzPlusInclude "peekpoke.bb" ;PeekPoke Modulewindowx=(ClientWidth(Desktop())-640)/2windowy=(ClientHeight(Desktop())-480)/2window=CreateWindow("",windowx,windowy,640,480,0,1+2+32)canvas=CreateCanvas(0,0,640,480,window)SetBuffer CanvasBuffer(canvas)load=0 ;Flag to load or create an imageIf load=1 image=LoadImage("test.bmp")Else width=100 height=63 frames=1 image=CreateImage(width,height,frames)EndIfBufferList=PeekI(image+28) ;pImageBufferListNumFrames=PeekI(image+52) ;ImageFramesbuffer=ImageBuffer(image,0)pImageBuffer=PeekI(BufferList+(0*4)) ;pImageBuffer[frame]LockBuffer buffer ;LockBuffer to return a pointer to the pixelsUnlockBuffer bufferWidthImage=PeekI(buffer+172) ;ImageWidthHeightImage=PeekI(buffer+176) ;ImageHeightDDSurface7=PeekI(buffer+192) ;pImageDDSurface7PixelData=PeekI(buffer+220) ;pImagePixelDataDrawImageText(Str(0),image,0)If GraphicsDepth()=32 pitch=(((width*8)+127)/128)*16 ;16 bit-aligned For iy=1 To height-2 offset=(pitch*iy) Shl 2 For ix=1 To width-2 pixel=BGRA(Rand(255),Rand(255),Rand(255)) PokeI(PixelData+offset+(ix Shl 2),pixel) Next NextElseIf GraphicsDepth()=16 pitch=(((width*8)+255)/256)*32 ;32-bit aligned For iy=1 To height-2 offset=(pitch*iy) Shl 1 For ix=1 To width-2 pixel=BGR16(Rand(255),Rand(255),Rand(255)) PokeS(PixelData+offset+(ix Shl 1),pixel) Next NextEndIfWhile Not KeyDown(1) ;Esc key If WaitEvent(0)=$803 Then End ;Close button Cls Text 0,0,"width="+width+" height="+height+" frames="+frames Text 0,12,"image="+image Text 0,36,"BufferList="+BufferList Text 0,48,"NumFrames="+NumFrames Text 0,72,"buffer="+buffer Text 0,84,"pImageBuffer="+pImageBuffer Text 0,108,"WidthImage="+WidthImage Text 0,120,"HeightImage="+HeightImage Text 0,132,"DDSurface7="+DDSurface7 Text 0,144,"PixelData="+PixelData Text 0,156,"pitch="+pitch DrawImage image,MouseX(canvas)-width,MouseY(canvas)-height FlipCanvas canvasWendEndFunction BGRA(blue,green,red,alpha=$FF) ;Converts BGRA to a 32-bit value, alpha is optional Return ((alpha Shl 24) Or (red Shl 16) Or (green Shl 8) Or blue)End FunctionFunction BGR16(blue,green,red) ;Converts BGR to a 16-bit value Return ((red Shr 3 Shl 11) Or (green Shr 2 Shl 5) Or (blue Shr 3))End FunctionFunction DrawImageText(textstr$,image,frame=0) ;Draw frame number on image Local buffer=GraphicsBuffer() SetBuffer ImageBuffer(image,frame) ClsColor 255,255,255 : Cls Color 255,0,0 : Text 0,0,textstr$ ClsColor 0,0,0 : Color 255,255,255 SetBuffer bufferEnd Function