live cart reloading fixes #374

This commit is contained in:
BADIM-PC\Vadim 2017-11-23 13:19:31 +03:00
parent 90259da4c1
commit ffaa3d79ab
1 changed files with 22 additions and 20 deletions

View File

@ -542,12 +542,12 @@ static bool bufferEmpty(const u8* data, s32 size)
return true; return true;
} }
static char* saveTextSection(char* ptr, const char* tag, const char* data) static char* saveTextSection(char* ptr, const char* data)
{ {
if(strlen(data) == 0) if(strlen(data) == 0)
return ptr; return ptr;
sprintf(ptr, "-- <%s>\n%s\n-- </%s>\n", tag, data, tag); sprintf(ptr, "%s\n", data);
ptr += strlen(ptr); ptr += strlen(ptr);
return ptr; return ptr;
@ -605,7 +605,7 @@ static s32 saveProject(Console* console, void* buffer)
tic_mem* tic = console->tic; tic_mem* tic = console->tic;
char* stream = buffer; char* stream = buffer;
char* ptr = saveTextSection(stream, "CODE", tic->cart.code.data); char* ptr = saveTextSection(stream, tic->cart.code.data);
for(s32 i = 0; i < COUNT_OF(BinarySections); i++) for(s32 i = 0; i < COUNT_OF(BinarySections); i++)
{ {
@ -618,31 +618,33 @@ static s32 saveProject(Console* console, void* buffer)
return strlen(stream); return strlen(stream);
} }
static bool loadTextSection(const char* project, const char* tag, void* dst, s32 size) static bool loadTextSection(const char* project, void* dst, s32 size)
{ {
char tagbuf[64];
sprintf(tagbuf, "-- <%s>\n", tag);
const char* start = SDL_strstr(project, tagbuf);
bool done = false; bool done = false;
if(start) const char* start = project;
const char* end = project + strlen(project);
{ {
start += strlen(tagbuf); char tagbuf[64];
if(start < project + strlen(project)) for(s32 i = 0; i < COUNT_OF(BinarySections); i++)
{ {
sprintf(tagbuf, "\n-- </%s>", tag); sprintf(tagbuf, "-- <%s>\n", BinarySections[i].tag);
const char* end = SDL_strstr(start, tagbuf);
if(end > start) const char* ptr = SDL_strstr(project, tagbuf);
{
SDL_memcpy(dst, start, SDL_min(size, end - start)); if(ptr && ptr < end)
done = true; end = ptr;
}
} }
} }
if(end > start)
{
SDL_memcpy(dst, start, SDL_min(size, end - start));
done = true;
}
return done; return done;
} }
@ -721,7 +723,7 @@ static bool loadProject(Console* console, const char* data, s32 size, tic_cartri
SDL_memset(cart, 0, sizeof(tic_cartridge)); SDL_memset(cart, 0, sizeof(tic_cartridge));
SDL_memcpy(&cart->palette, &tic->config.palette.data, sizeof(tic_palette)); SDL_memcpy(&cart->palette, &tic->config.palette.data, sizeof(tic_palette));
if(loadTextSection(project, "CODE", cart->code.data, sizeof(tic_code))) if(loadTextSection(project, cart->code.data, sizeof(tic_code)))
done = true; done = true;
for(s32 i = 0; i < COUNT_OF(BinarySections); i++) for(s32 i = 0; i < COUNT_OF(BinarySections); i++)