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, ...
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
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.
Interesting, thanks Gernot :good:
Interesting secret, if you have more of such, don't wait to share them :D
Wow, this is very cool for creating data at runtime using the "mem://" protocol.
:booze:
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
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?
Unfortunately, PLAYMUSIC is a bit different. You might have to extract that file to the tmp directory. :(
if I always have to save to disk as I did before, nothing changes with the update :|
Thanks for the information