Array of Bytes

Previous topic - Next topic

Schranz0r

by GernotFrisch:

Code (glbasic) Select
// If this is not a seperate file, you must end the main() function first
FUNCTION _foo:
ENDFUNCTION

// Global variable for storing the bank pointers
INLINE
DGArray<unsigned char*> gMemBanks;
class MemBank_cleaner
{
   public:
   ~MemBank_cleaner()
   {
      for(int i=0; i<(int)LEN(gMemBanks); ++i)
         FREEBANK(i);
   }
} gMemBankClean;
ENDINLINE

FUNCTION CREATEBANK: index, memsz
INLINE
if(LEN(gMemBanks) <= index)
   REDIM(gMemBanks, index+1);
   gMemBanks(index) = new unsigned char[(int)memsz];
ENDINLINE
ENDFUNCTION

FUNCTION POKEBYTE: ibank, position, value
INLINE
   gMemBanks(ibank)[(int)position] = (unsigned char)value;
ENDINLINE
ENDFUNCTION

FUNCTION PEEKBYTE: ibank, position
INLINE
   return (DGInt)gMemBanks(ibank)[(int)position];
ENDINLINE
ENDFUNCTION

FUNCTION FREEBANK: ibank
INLINE
   if(gMemBanks(ibank))
   {
      delete[] gMemBanks(ibank);
      gMemBanks(ibank) = 0L;
   }
ENDINLINE
ENDFUNCTION
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Heiko

Wäre ein ResizeBank auch noch möglich?
Sowas wäre ja auch was fürs nächste große Update, als Integration.

Schranz0r

is irgendwie nicht wirklich Basiclike, deshalb wirds auch nur ein Inline bleiben ;)
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Heiko

schade, naja, aber besser als nix.
da wäre aber tatsächlich mal so ein userlibs ordner als standard oder so der übersicht halber net schlecht.

Schranz0r

kannste ja machen ;)
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Heiko

wie das denn, ich mein so einen automatischen ordner, wo die includes abgelegt werden und die dll´s.
okay die muss man dann auch hinterher ins spieleverzeichnis kopieren, aber sonst....

ich denke mal so ein standard userlibs ordner müsste doch von gernot erstellt werden, oder?

also wo automatisch drauf zugegriffen wird, bei bedarf.

Heiko

#6
ich hab dazu mal ne frage.
peekbyte und peeklong.

peekbyte% logisch, liest ein byte.
was aber liest peeklong% ?
nur nen integer?
aber in welchem bereich.
bräuchte das in bestimmten bereichen.
readbyte liest ein byte
readword 2 bytes 0-65535 oder so...
was aber liest diesen bereich?   -2147483648   +2147483647
shortieee ?

oder liest das beides das peeklong?
ich mein, wenns kein höherer speicherverbrauch ist, welcher zu berücksichtigen wäre, ists ja wurscht.
bitte um ne kurze erklärung.

Moru

byte = 1 unit
word or short = 2 units
long = 4 units

When you want a word you peekbyte two bytes after eachothers and put them together, one you multiply with 256.

With long you do the same but get 4 bytes, each time multiply with 256 more (0x100, 0x10000, 0x1000000) to move it to the right position.

Hope this is what you asked about, I don't know much german but have a little spare time :-)

Heiko

i need READanycommand -2147483648  -  +2147483647

Moru

That is a long wich is 4 bytes and you want it signed. Since this is the default in GLBasic you don't need any databank, just use a normal array.

Heiko

so ists just a READLONG.

yes i see thats the wrong section for asking that.......i´m confused cause its to late today....