#477 script detection changes
This commit is contained in:
parent
6bb605e640
commit
913d4759cf
47
src/tic.c
47
src/tic.c
|
@ -1420,16 +1420,18 @@ static void cart2ram(tic_mem* memory)
|
||||||
initCover(memory);
|
initCover(memory);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char* readMetatag(const char* code, const char* tag, const char* format)
|
static const char* readMetatag(const char* code, const char* tag, const char* comment)
|
||||||
{
|
{
|
||||||
const char* start = NULL;
|
const char* start = NULL;
|
||||||
|
|
||||||
{
|
{
|
||||||
|
static char format[] = "%s %s:";
|
||||||
|
|
||||||
char* tagBuffer = malloc(strlen(format) + strlen(tag));
|
char* tagBuffer = malloc(strlen(format) + strlen(tag));
|
||||||
|
|
||||||
if(tagBuffer)
|
if(tagBuffer)
|
||||||
{
|
{
|
||||||
sprintf(tagBuffer, format, tag);
|
sprintf(tagBuffer, format, comment, tag);
|
||||||
if((start = strstr(code, tagBuffer)))
|
if((start = strstr(code, tagBuffer)))
|
||||||
start += strlen(tagBuffer);
|
start += strlen(tagBuffer);
|
||||||
free(tagBuffer);
|
free(tagBuffer);
|
||||||
|
@ -1462,44 +1464,31 @@ static const char* readMetatag(const char* code, const char* tag, const char* fo
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char* TagFormatLua = "-- %s:";
|
static bool compareMetatag(const char* code, const char* tag, const char* value, const char* comment)
|
||||||
static const char* TagFormatJS = "// %s:";
|
|
||||||
|
|
||||||
static bool compareMetatag(const char* code, const char* tag, const char* value)
|
|
||||||
{
|
{
|
||||||
bool result = false;
|
bool result = false;
|
||||||
|
|
||||||
// LUA comments
|
const char* str = readMetatag(code, tag, comment);
|
||||||
const char* str = readMetatag(code, tag, TagFormatLua);
|
|
||||||
|
|
||||||
if(str)
|
if(str)
|
||||||
{
|
{
|
||||||
result = strcmp(str, value) == 0;
|
result = strcmp(str, value) == 0;
|
||||||
free((void*)str);
|
free((void*)str);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
// JS comments
|
|
||||||
str = readMetatag(code, tag, TagFormatJS);
|
|
||||||
|
|
||||||
if(str)
|
|
||||||
{
|
|
||||||
result = strcmp(str, value) == 0;
|
|
||||||
free((void*)str);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool isMoonscript(const char* code)
|
static bool isMoonscript(const char* code)
|
||||||
{
|
{
|
||||||
return compareMetatag(code, "script", "moon") || compareMetatag(code, "script", "moonscript");
|
return compareMetatag(code, "script", "moon", getMoonScriptConfig()->singleComment)
|
||||||
|
|| compareMetatag(code, "script", "moonscript", getMoonScriptConfig()->singleComment);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool isJavascript(const char* code)
|
static bool isJavascript(const char* code)
|
||||||
{
|
{
|
||||||
return compareMetatag(code, "script", "js") || compareMetatag(code, "script", "javascript");
|
return compareMetatag(code, "script", "js", getJsScriptConfig()->singleComment)
|
||||||
|
|| compareMetatag(code, "script", "javascript", getJsScriptConfig()->singleComment);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const tic_script_config* getScriptConfig(const char* code)
|
static const tic_script_config* getScriptConfig(const char* code)
|
||||||
|
@ -1514,25 +1503,15 @@ static const tic_script_config* api_get_script_config(tic_mem* memory)
|
||||||
return getScriptConfig(memory->cart.bank0.code.data);
|
return getScriptConfig(memory->cart.bank0.code.data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void updateSaveid(tic_mem* memory)
|
static void updateSaveid(tic_mem* memory)
|
||||||
{
|
{
|
||||||
memset(memory->saveid, 0, sizeof memory->saveid);
|
memset(memory->saveid, 0, sizeof memory->saveid);
|
||||||
const char* saveid = readMetatag(memory->cart.bank0.code.data, "saveid", TagFormatLua);
|
const char* saveid = readMetatag(memory->cart.bank0.code.data, "saveid", api_get_script_config(memory)->singleComment);
|
||||||
if(saveid)
|
if(saveid)
|
||||||
{
|
{
|
||||||
strcpy(memory->saveid, saveid);
|
strcpy(memory->saveid, saveid);
|
||||||
free((void*)saveid);
|
free((void*)saveid);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
const char* saveid = readMetatag(memory->cart.bank0.code.data, "saveid", TagFormatJS);
|
|
||||||
if(saveid)
|
|
||||||
{
|
|
||||||
strcpy(memory->saveid, saveid);
|
|
||||||
free((void*)saveid);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void api_tick(tic_mem* tic, tic_tick_data* data)
|
static void api_tick(tic_mem* tic, tic_tick_data* data)
|
||||||
|
@ -1566,15 +1545,15 @@ static void api_tick(tic_mem* tic, tic_tick_data* data)
|
||||||
|
|
||||||
if(strlen(code))
|
if(strlen(code))
|
||||||
{
|
{
|
||||||
|
config = getScriptConfig(code);
|
||||||
cart2ram(tic);
|
cart2ram(tic);
|
||||||
tic->input = compareMetatag(code, "input", "mouse") ? tic_mouse_input : tic_gamepad_input;
|
tic->input = compareMetatag(code, "input", "mouse", config->singleComment) ? tic_mouse_input : tic_gamepad_input;
|
||||||
|
|
||||||
if(tic->input == tic_mouse_input)
|
if(tic->input == tic_mouse_input)
|
||||||
tic->ram.vram.vars.mask.data = 0;
|
tic->ram.vram.vars.mask.data = 0;
|
||||||
|
|
||||||
data->start = data->counter();
|
data->start = data->counter();
|
||||||
|
|
||||||
config = getScriptConfig(code);
|
|
||||||
done = config->init(tic, code);
|
done = config->init(tic, code);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in New Issue