Difference between revisions of "PEEK and POKE Library"

From QB64 Wiki
Jump to navigation Jump to search
imported>Clippy
m
imported>Clippy
m
Line 37: Line 37:


{{Cl|DECLARE DYNAMIC LIBRARY|DECLARE CUSTOMTYPE LIBRARY}} "peekpoke"
{{Cl|DECLARE DYNAMIC LIBRARY|DECLARE CUSTOMTYPE LIBRARY}} "peekpoke"
     {{Cl|FUNCTION}} peekb~%% ({{Cl|BYVAL}} p {{Cl|AS}} {{Cl|_UNSIGNED}} {{Cl|_OFFSET}})
     {{Cl|FUNCTION}} peekb~%% ({{Cl|BYVAL}} p {{Cl|AS}} {{Cl|_UNSIGNED}} {{Cl|_OFFSET}}) 'Byte
     {{Cl|FUNCTION}} peekw~% ({{Cl|BYVAL}} p {{Cl|AS}} {{Cl|_UNSIGNED}} {{Cl|_OFFSET}})
     {{Cl|FUNCTION}} peekw~% ({{Cl|BYVAL}} p {{Cl|AS}} {{Cl|_UNSIGNED}} {{Cl|_OFFSET}})  'Integer(Word)
     {{Cl|FUNCTION}} peekd~& ({{Cl|BYVAL}} p {{Cl|AS}} {{Cl|_UNSIGNED}} {{Cl|_OFFSET}})
     {{Cl|FUNCTION}} peekd~& ({{Cl|BYVAL}} p {{Cl|AS}} {{Cl|_UNSIGNED}} {{Cl|_OFFSET}})  'Long(Dword)
     {{Cl|SUB}} pokeb ({{Cl|BYVAL}} p {{Cl|AS}} {{Cl|_UNSIGNED}} {{Cl|_OFFSET}}, {{Cl|BYVAL}} n {{Cl|AS}} {{Cl|_UNSIGNED}} {{Cl|_BYTE}})
     {{Cl|SUB}} pokeb ({{Cl|BYVAL}} p {{Cl|AS}} {{Cl|_UNSIGNED}} {{Cl|_OFFSET}}, {{Cl|BYVAL}} n {{Cl|AS}} {{Cl|_UNSIGNED}} {{Cl|_BYTE}})  
     {{Cl|SUB}} pokew ({{Cl|BYVAL}} p {{Cl|AS}} {{Cl|_UNSIGNED}} {{Cl|_OFFSET}}, {{Cl|BYVAL}} n {{Cl|AS}} {{Cl|_UNSIGNED}} {{Cl|INTEGER}})
     {{Cl|SUB}} pokew ({{Cl|BYVAL}} p {{Cl|AS}} {{Cl|_UNSIGNED}} {{Cl|_OFFSET}}, {{Cl|BYVAL}} n {{Cl|AS}} {{Cl|_UNSIGNED}} {{Cl|INTEGER}})
     {{Cl|SUB}} poked ({{Cl|BYVAL}} p {{Cl|AS}} {{Cl|_UNSIGNED}} {{Cl|_OFFSET}}, {{Cl|BYVAL}} n {{Cl|AS}} {{Cl|_UNSIGNED}} {{Cl|LONG}})
     {{Cl|SUB}} poked ({{Cl|BYVAL}} p {{Cl|AS}} {{Cl|_UNSIGNED}} {{Cl|_OFFSET}}, {{Cl|BYVAL}} n {{Cl|AS}} {{Cl|_UNSIGNED}} {{Cl|LONG}})
Line 74: Line 74:
{{Cl|END}} '' ''
{{Cl|END}} '' ''
{{CodeEnd}}
{{CodeEnd}}
<center>'''Note: These functions and statements use a reference variable name instead of [[DEF SEG]].'''</center>





Revision as of 16:59, 19 December 2011

This header allows you to peek and poke bytes, words, and dwords in QB64. The functions seem to work okay when used with signed variables also. For example, I am able to assign the return of peekw~% to an INTEGER without problem. Regards, Michael Calkins


Create PeekPoke.h text file in the QB64 folder:

/* peek and poke for bytes, words, and dwords in qb64 public domain, sept 2011, michael calkins http://www.network54.com/Forum/648955/message/1315950606/ */ unsigned char peekb(void * p) {return *(unsigned char *)p;} unsigned short int peekw(void * p) {return *(unsigned short int *)p;} unsigned long int peekd(void * p) {return *(unsigned long int *)p;} void pokeb(void * p, unsigned char n) {*(unsigned char *)p = n;} void pokew(void * p, unsigned short int n) {*(unsigned short int *)p = n;} void poked(void * p, unsigned long int n) {*(unsigned long int *)p = n;}

Public domain, Sept 2011, Michael Calkins

PeekPoke.BAS

' peek and poke for bytes, words, and dwords in qb64 ' requires peekpoke.h ' public domain, sept 2011, michael calkins DECLARE CUSTOMTYPE LIBRARY "peekpoke" FUNCTION peekb~%% (BYVAL p AS _UNSIGNED _OFFSET) 'Byte FUNCTION peekw~% (BYVAL p AS _UNSIGNED _OFFSET) 'Integer(Word) FUNCTION peekd~& (BYVAL p AS _UNSIGNED _OFFSET) 'Long(Dword) SUB pokeb (BYVAL p AS _UNSIGNED _OFFSET, BYVAL n AS _UNSIGNED _BYTE) SUB pokew (BYVAL p AS _UNSIGNED _OFFSET, BYVAL n AS _UNSIGNED INTEGER) SUB poked (BYVAL p AS _UNSIGNED _OFFSET, BYVAL n AS _UNSIGNED LONG) END DECLARE ' examples: DIM buffer AS STRING * 16 DIM ptr AS _UNSIGNED _OFFSET buffer = "abcd---- i-ptrs" ptr = _OFFSET(buffer) PRINT buffer pokeb ptr + &HA, &H3 PRINT buffer pokew ptr + 5, &H3FA8 PRINT buffer poked ptr + 4, &HDBB2B1B0 PRINT buffer poked ptr, CVL("QB64") poked ptr + 4, &H2020011A PRINT buffer PRINT "0x" + HEX$(peekb~%%(ptr + 1)) PRINT "0x" + HEX$(peekw~%(ptr + 2)) PRINT "0x" + HEX$(peekd~&(ptr + 9)) END

Note: These functions and statements use a reference variable name instead of DEF SEG.


See also:



Navigation:
Keyword Reference - Alphabetical
Keyword Reference - By Usage
Main Wiki Page