GLBasic forum

Codesnippets => Code Snippets => Topic started by: Kitty Hello on 2021-Oct-14

Title: Load data from memory
Post by: Kitty Hello on 2021-Oct-14
I tell you a secret. GLBasic can load data from a memory buffer, as if it was a file. With the attached code, you can use the contents of a string to "read" it as a file. This should work for about everything. Sprites, sounds, binary files, ...

Code: (glbasic) [Select]



LOCAL mem$ = "Hello World"
LOCAL memlen = LEN(mem$)

LOCAL file$ = MemMakeFile$(mem$)

LOCAL text$
OPENFILE(1, file$, TRUE)
READSTR 1, text$, 64
CLOSEFILE 1
STDOUT text$ + "\n"
KEYWAIT

FUNCTION foo:
ENDFUNCTION

INLINE
extern "C" {int sprintf(char *str, const char *format, ...); }
ENDINLINE


FUNCTION MemMakeFile$: BYREF data$, nofBytes = -1
IF nofBytes < 0 THEN nofBytes = LEN(data$)
LOCAL url$
LOCAL hx$ = RIGHT$("0000000000000000" + HEX$(nofBytes), 8)
INLINE
void* address = &data_Str[0];
char buffer[64];
sprintf(buffer, "%x", address);

url_Str = CGStr("mem://") + hx_Str + CGStr(".") + CGStr(buffer);
ENDINLINE


RETURN url$
ENDFUNCTION
Title: Re: Load data from memory
Post by: Qedo on 2021-Oct-15
Thanks Gernot for this very very interesting secret.  :good:
I will try to apply it to my custom shoebox where I save and reload some files.
Title: Re: Load data from memory
Post by: bigsofty on 2021-Oct-15
Interesting, thanks Gernot  :good:
Title: Re: Load data from memory
Post by: dreamerman on 2021-Oct-20
Interesting secret, if you have more of such, don't wait to share them :D
Title: Re: Load data from memory
Post by: hardyx on 2021-Oct-20
Wow, this is very cool for creating data at runtime using the "mem://" protocol.
 :booze:
Title: Re: Load data from memory
Post by: Qedo on 2021-Dec-02
help me good people
To improve the custom shoebox for audio files because there is no MEM2SOUND command or something similar I'm using Gernot's excellent solution of using memory as a file.
It works fine for bmp, jpg, png, wav files but not for avi, mp3 (what I need :(). I think it is a win10 problem. Do you have any ideas about it?
Ciao a tutti
Title: Re: Load data from memory
Post by: dreamerman on 2021-Dec-02
I didn't play with this trick, so can't say much, but I didn't see any file format restrictions in GLB source. Did You check ogg files for music? This shouldn't be OS specific so I doubt it rather something else, can You share any source code to check this?
Title: Re: Load data from memory
Post by: Kitty Hello on 2021-Dec-04
Unfortunately, PLAYMUSIC is a bit different. You might have to extract that file to the tmp directory. :(
Title: Re: Load data from memory
Post by: Qedo on 2021-Dec-04
if I always have to save to disk as I did before, nothing changes with the update  :|
Thanks for the information