#477 script detection changes

This commit is contained in:
BADIM-PC\Vadim 2017-12-23 18:35:16 +03:00
parent 6bb605e640
commit 913d4759cf
1 changed files with 13 additions and 34 deletions

View File

@ -1420,16 +1420,18 @@ static void cart2ram(tic_mem* 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;
{
static char format[] = "%s %s:";
char* tagBuffer = malloc(strlen(format) + strlen(tag));
if(tagBuffer)
{
sprintf(tagBuffer, format, tag);
sprintf(tagBuffer, format, comment, tag);
if((start = strstr(code, tagBuffer)))
start += strlen(tagBuffer);
free(tagBuffer);
@ -1462,44 +1464,31 @@ static const char* readMetatag(const char* code, const char* tag, const char* fo
return NULL;
}
static const char* TagFormatLua = "-- %s:";
static const char* TagFormatJS = "// %s:";
static bool compareMetatag(const char* code, const char* tag, const char* value)
static bool compareMetatag(const char* code, const char* tag, const char* value, const char* comment)
{
bool result = false;
// LUA comments
const char* str = readMetatag(code, tag, TagFormatLua);
const char* str = readMetatag(code, tag, comment);
if(str)
{
result = strcmp(str, value) == 0;
free((void*)str);
}
else
{
// JS comments
str = readMetatag(code, tag, TagFormatJS);
if(str)
{
result = strcmp(str, value) == 0;
free((void*)str);
}
}
return result;
}
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)
{
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)
@ -1514,25 +1503,15 @@ static const tic_script_config* api_get_script_config(tic_mem* memory)
return getScriptConfig(memory->cart.bank0.code.data);
}
static void updateSaveid(tic_mem* memory)
{
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)
{
strcpy(memory->saveid, 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)
@ -1566,15 +1545,15 @@ static void api_tick(tic_mem* tic, tic_tick_data* data)
if(strlen(code))
{
config = getScriptConfig(code);
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)
tic->ram.vram.vars.mask.data = 0;
data->start = data->counter();
config = getScriptConfig(code);
done = config->init(tic, code);
}
else