live cart reloading fixes #374
This commit is contained in:
		@@ -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,29 +618,31 @@ 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++)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user