no message
This commit is contained in:
		
							
								
								
									
										51
									
								
								src/run.c
									
									
									
									
									
								
							
							
						
						
									
										51
									
								
								src/run.c
									
									
									
									
									
								
							@@ -79,7 +79,7 @@ static const char* getPMemName(Run* run)
 | 
			
		||||
{
 | 
			
		||||
	static char buffer[FILENAME_MAX];
 | 
			
		||||
 | 
			
		||||
	const char* data = strlen(run->tic->saveid) ? run->tic->saveid : run->tic->cart.code.data;
 | 
			
		||||
	const char* data = strlen(run->tic->saveid) ? run->tic->saveid : run->tic->code.data;
 | 
			
		||||
	char* md5 = data2md5(data, (s32)strlen(data));
 | 
			
		||||
	strcpy(buffer, TIC_LOCAL);
 | 
			
		||||
	strcat(buffer, md5);
 | 
			
		||||
@@ -89,6 +89,8 @@ static const char* getPMemName(Run* run)
 | 
			
		||||
 | 
			
		||||
static void tick(Run* run)
 | 
			
		||||
{
 | 
			
		||||
	tic_mem* tic = run->tic;
 | 
			
		||||
 | 
			
		||||
	while(pollEvent());
 | 
			
		||||
 | 
			
		||||
	if (getStudioMode() != TIC_RUN_MODE)
 | 
			
		||||
@@ -96,6 +98,53 @@ static void tick(Run* run)
 | 
			
		||||
 | 
			
		||||
	if(!run->init)
 | 
			
		||||
	{
 | 
			
		||||
		// process 'dofile'
 | 
			
		||||
		{
 | 
			
		||||
			memset(tic->code.data, 0, sizeof(tic_code));
 | 
			
		||||
 | 
			
		||||
			static const char DoFileTag[] = "dofile(";
 | 
			
		||||
			enum {Size = sizeof DoFileTag - 1};
 | 
			
		||||
 | 
			
		||||
			if (memcmp(tic->cart.code.data, DoFileTag, Size) == 0)
 | 
			
		||||
			{
 | 
			
		||||
				const char* start = tic->cart.code.data + Size;
 | 
			
		||||
				const char* end = strchr(start, ')');
 | 
			
		||||
 | 
			
		||||
				if(end && *start == *(end-1) && (*start == '"' || *start == '\''))
 | 
			
		||||
				{
 | 
			
		||||
					char filename[FILENAME_MAX] = {0};
 | 
			
		||||
					memcpy(filename, start + 1, end - start - 2);
 | 
			
		||||
 | 
			
		||||
					s32 size = 0;
 | 
			
		||||
					void* buffer = fsReadFile(filename, &size);
 | 
			
		||||
 | 
			
		||||
					if(buffer)
 | 
			
		||||
					{
 | 
			
		||||
						if(size > 0)
 | 
			
		||||
						{
 | 
			
		||||
							if(size > TIC_CODE_SIZE)
 | 
			
		||||
							{
 | 
			
		||||
								char buffer[256];
 | 
			
		||||
								sprintf(buffer, "code is larger than %i symbols", TIC_CODE_SIZE);
 | 
			
		||||
								onError(run, buffer);
 | 
			
		||||
 | 
			
		||||
								return;
 | 
			
		||||
							}
 | 
			
		||||
							else SDL_memcpy(tic->code.data, buffer, size);
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
					else
 | 
			
		||||
					{
 | 
			
		||||
						char buffer[256];
 | 
			
		||||
						sprintf(buffer, "dofile: file '%s' not found", filename);
 | 
			
		||||
						onError(run, buffer);
 | 
			
		||||
 | 
			
		||||
						return;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		run->tickData.start = run->tickData.counter(),
 | 
			
		||||
		run->init = true;
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										84
									
								
								src/tic.c
									
									
									
									
									
								
							
							
						
						
									
										84
									
								
								src/tic.c
									
									
									
									
									
								
							@@ -1343,15 +1343,15 @@ static bool isJavascript(const char* code)
 | 
			
		||||
 | 
			
		||||
static tic_script_lang api_get_script(tic_mem* memory)
 | 
			
		||||
{
 | 
			
		||||
	if(isMoonscript(memory->cart.code.data)) return tic_script_moon;
 | 
			
		||||
	if(isJavascript(memory->cart.code.data)) return tic_script_js;
 | 
			
		||||
	if(isMoonscript(memory->code.data)) return tic_script_moon;
 | 
			
		||||
	if(isJavascript(memory->code.data)) return tic_script_js;
 | 
			
		||||
	return tic_script_lua;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void updateSaveid(tic_mem* memory)
 | 
			
		||||
{
 | 
			
		||||
	memset(memory->saveid, 0, sizeof memory->saveid);
 | 
			
		||||
	const char* saveid = readMetatag(memory->cart.code.data, "saveid", TagFormatLua);
 | 
			
		||||
	const char* saveid = readMetatag(memory->code.data, "saveid", TagFormatLua);
 | 
			
		||||
	if(saveid)
 | 
			
		||||
	{
 | 
			
		||||
		strcpy(memory->saveid, saveid);
 | 
			
		||||
@@ -1359,7 +1359,7 @@ static void updateSaveid(tic_mem* memory)
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		const char* saveid = readMetatag(memory->cart.code.data, "saveid", TagFormatJS);
 | 
			
		||||
		const char* saveid = readMetatag(memory->code.data, "saveid", TagFormatJS);
 | 
			
		||||
		if(saveid)
 | 
			
		||||
		{
 | 
			
		||||
			strcpy(memory->saveid, saveid);
 | 
			
		||||
@@ -1378,77 +1378,18 @@ static void api_tick(tic_mem* memory, tic_tick_data* data)
 | 
			
		||||
	{
 | 
			
		||||
		cart2ram(memory);
 | 
			
		||||
 | 
			
		||||
		char* code = machine->memory.cart.code.data;
 | 
			
		||||
		if(code && strlen(code))
 | 
			
		||||
		const char* code = machine->memory.code.data;
 | 
			
		||||
 | 
			
		||||
		if(!strlen(code))
 | 
			
		||||
			memcpy(memory->code.data, memory->cart.code.data, sizeof(tic_code));
 | 
			
		||||
 | 
			
		||||
		if(strlen(code))
 | 
			
		||||
		{
 | 
			
		||||
			static const char DoFileTag[] = "dofile(";
 | 
			
		||||
			enum {Size = sizeof DoFileTag - 1};
 | 
			
		||||
 | 
			
		||||
			if (memcmp(code, DoFileTag, Size) == 0)
 | 
			
		||||
			{
 | 
			
		||||
				const char* start = code + Size;
 | 
			
		||||
				const char* end = strchr(start, ')');
 | 
			
		||||
 | 
			
		||||
				if(end && *start == *(end-1) && (*start == '"' || *start == '\''))
 | 
			
		||||
				{
 | 
			
		||||
					char filename[FILENAME_MAX] = {0};
 | 
			
		||||
					memcpy(filename, start + 1, end - start - 2);
 | 
			
		||||
 | 
			
		||||
					FILE* file = fopen(filename, "rb");
 | 
			
		||||
 | 
			
		||||
					if(file)
 | 
			
		||||
					{
 | 
			
		||||
						fseek(file, 0, SEEK_END);
 | 
			
		||||
						s32 size = ftell(file);
 | 
			
		||||
						fseek(file, 0, SEEK_SET);
 | 
			
		||||
 | 
			
		||||
						if(size > 0)
 | 
			
		||||
						{
 | 
			
		||||
							if(size > TIC_CODE_SIZE)
 | 
			
		||||
							{
 | 
			
		||||
								char buffer[256];
 | 
			
		||||
								sprintf(buffer, "code is larger than %i symbols", TIC_CODE_SIZE);
 | 
			
		||||
								machine->data->error(machine->data->data, buffer);
 | 
			
		||||
 | 
			
		||||
								fclose(file);
 | 
			
		||||
								
 | 
			
		||||
								return;
 | 
			
		||||
							}
 | 
			
		||||
							else
 | 
			
		||||
							{
 | 
			
		||||
								void* buffer = malloc(size+1);
 | 
			
		||||
 | 
			
		||||
								if(buffer)
 | 
			
		||||
								{
 | 
			
		||||
									memset(buffer, 0, size+1);
 | 
			
		||||
 | 
			
		||||
									if(fread(buffer, size, 1, file)) {}
 | 
			
		||||
 | 
			
		||||
									code = buffer;
 | 
			
		||||
								}								
 | 
			
		||||
							}							
 | 
			
		||||
						}
 | 
			
		||||
 | 
			
		||||
						fclose(file);
 | 
			
		||||
					}
 | 
			
		||||
					else
 | 
			
		||||
					{
 | 
			
		||||
						char buffer[256];
 | 
			
		||||
						sprintf(buffer, "dofile: file '%s' not found", filename);
 | 
			
		||||
						machine->data->error(machine->data->data, buffer);
 | 
			
		||||
						return;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			memory->input = compareMetatag(code, "input", "mouse") ? tic_mouse_input : tic_gamepad_input;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
			if(memory->input == tic_mouse_input)
 | 
			
		||||
				memory->ram.vram.vars.mask.data = 0;
 | 
			
		||||
 | 
			
		||||
			//////////////////////////
 | 
			
		||||
 | 
			
		||||
			memory->script = tic_script_lua;
 | 
			
		||||
 | 
			
		||||
			if (isMoonscript(code))
 | 
			
		||||
@@ -1469,12 +1410,7 @@ static void api_tick(tic_mem* memory, tic_tick_data* data)
 | 
			
		||||
				return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// TODO: possible memory leak if script not initialozed
 | 
			
		||||
		if(code != machine->memory.cart.code.data)
 | 
			
		||||
			free(code);
 | 
			
		||||
 | 
			
		||||
		machine->state.scanline = memory->script == tic_script_js ? callJavascriptScanline : callLuaScanline;
 | 
			
		||||
 | 
			
		||||
		machine->state.initialized = true;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -119,6 +119,7 @@ struct tic_mem
 | 
			
		||||
	tic_script_lang 	script;
 | 
			
		||||
	tic_font 			font;
 | 
			
		||||
	tic_api 			api;
 | 
			
		||||
	tic_code			code;
 | 
			
		||||
 | 
			
		||||
	char saveid[TIC_SAVEID_SIZE];
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user