#477 script config moved to TIC module
This commit is contained in:
parent
b26eb6bd1c
commit
1280a1291a
94
src/code.c
94
src/code.c
|
@ -194,79 +194,7 @@ static inline bool islineend(char c) {return c == '\n' || c == '\0';}
|
|||
static inline bool isalpha_(char c) {return isalpha(c) || c == '_';}
|
||||
static inline bool isalnum_(char c) {return isalnum(c) || c == '_';}
|
||||
|
||||
typedef struct
|
||||
{
|
||||
const char* blockCommentStart;
|
||||
const char* blockCommentEnd;
|
||||
const char* blockStringStart;
|
||||
const char* blockStringEnd;
|
||||
const char* singleCommentStart;
|
||||
|
||||
const char* const * keywords;
|
||||
s32 keywordsCount;
|
||||
} SyntaxConfig;
|
||||
|
||||
static const char* const LuaKeywords [] =
|
||||
{
|
||||
"and", "break", "do", "else", "elseif",
|
||||
"end", "false", "for", "function", "goto", "if",
|
||||
"in", "local", "nil", "not", "or", "repeat",
|
||||
"return", "then", "true", "until", "while"
|
||||
};
|
||||
|
||||
static const SyntaxConfig LuaSyntaxConfig =
|
||||
{
|
||||
.blockCommentStart = "--[[",
|
||||
.blockCommentEnd = "]]",
|
||||
.singleCommentStart = "--",
|
||||
.blockStringStart = "[[",
|
||||
.blockStringEnd = "]]",
|
||||
.keywords = LuaKeywords,
|
||||
.keywordsCount = COUNT_OF(LuaKeywords),
|
||||
};
|
||||
|
||||
static const char* const MoonKeywords [] =
|
||||
{
|
||||
"false", "true", "nil", "return",
|
||||
"break", "continue", "for", "while",
|
||||
"if", "else", "elseif", "unless", "switch",
|
||||
"when", "and", "or", "in", "do",
|
||||
"not", "super", "try", "catch",
|
||||
"with", "export", "import", "then",
|
||||
"from", "class", "extends", "new"
|
||||
};
|
||||
|
||||
static const SyntaxConfig MoonSyntaxConfig =
|
||||
{
|
||||
.blockCommentStart = NULL,
|
||||
.blockCommentEnd = NULL,
|
||||
.blockStringStart = NULL,
|
||||
.blockStringEnd = NULL,
|
||||
.singleCommentStart = "--",
|
||||
.keywords = MoonKeywords,
|
||||
.keywordsCount = COUNT_OF(MoonKeywords),
|
||||
};
|
||||
|
||||
static const char* const JsKeywords [] =
|
||||
{
|
||||
"break", "do", "instanceof", "typeof", "case", "else", "new",
|
||||
"var", "catch", "finally", "return", "void", "continue", "for",
|
||||
"switch", "while", "debugger", "function", "this", "with",
|
||||
"default", "if", "throw", "delete", "in", "try", "const"
|
||||
};
|
||||
|
||||
static const SyntaxConfig JsSyntaxConfig =
|
||||
{
|
||||
.blockCommentStart = "/*",
|
||||
.blockCommentEnd = "*/",
|
||||
.blockStringStart = NULL,
|
||||
.blockStringEnd = NULL,
|
||||
.singleCommentStart = "//",
|
||||
.keywords = JsKeywords,
|
||||
.keywordsCount = COUNT_OF(JsKeywords),
|
||||
};
|
||||
|
||||
static void parse(const char* start, u8* color, const SyntaxConfig* config)
|
||||
static void parse(const char* start, u8* color, const tic_script_config* config)
|
||||
{
|
||||
const char* ptr = start;
|
||||
|
||||
|
@ -412,10 +340,10 @@ static void parse(const char* start, u8* color, const SyntaxConfig* config)
|
|||
ptr++;
|
||||
continue;
|
||||
}
|
||||
else if(config->singleCommentStart && memcmp(ptr, config->singleCommentStart, strlen(config->singleCommentStart)) == 0)
|
||||
else if(config->singleComment && memcmp(ptr, config->singleComment, strlen(config->singleComment)) == 0)
|
||||
{
|
||||
singleCommentStart = ptr;
|
||||
ptr += strlen(config->singleCommentStart);
|
||||
ptr += strlen(config->singleComment);
|
||||
continue;
|
||||
}
|
||||
else if(isalpha_(c))
|
||||
|
@ -444,12 +372,9 @@ static void parseSyntaxColor(Code* code)
|
|||
{
|
||||
memset(code->colorBuffer, getConfig()->theme.code.var, sizeof(code->colorBuffer));
|
||||
|
||||
switch(code->tic->api.get_script(code->tic))
|
||||
{
|
||||
case tic_script_moon: parse(code->src, code->colorBuffer, &MoonSyntaxConfig); break;
|
||||
case tic_script_lua: parse(code->src, code->colorBuffer, &LuaSyntaxConfig); break;
|
||||
case tic_script_js: parse(code->src, code->colorBuffer, &JsSyntaxConfig); break;
|
||||
}
|
||||
tic_mem* tic = code->tic;
|
||||
|
||||
parse(code->src, code->colorBuffer, tic->api.get_script_config(tic));
|
||||
}
|
||||
|
||||
static char* getLineByPos(Code* code, char* pos)
|
||||
|
@ -1124,7 +1049,7 @@ static void setOutlineMode(Code* code)
|
|||
code->outline.index = 0;
|
||||
memset(code->outline.items, 0, OUTLINE_ITEMS_SIZE);
|
||||
|
||||
code->tic->api.get_script(code->tic) == tic_script_moon
|
||||
code->tic->api.get_script_config(code->tic)->lang == tic_script_moon
|
||||
? setMoonscriptOutlineMode(code)
|
||||
: setLuaOutlineMode(code);
|
||||
|
||||
|
@ -1158,7 +1083,10 @@ static void commentLine(Code* code)
|
|||
static char Comment[] = "-- ";
|
||||
enum {Size = sizeof Comment-1};
|
||||
|
||||
strcpy(Comment, code->tic->api.get_script(code->tic) == tic_script_js ? "// " : "-- ");
|
||||
tic_mem* tic = code->tic;
|
||||
|
||||
memcpy(Comment, tic->api.get_script_config(tic)->singleComment,
|
||||
strlen(tic->api.get_script_config(tic)->singleComment));
|
||||
|
||||
char* line = getLine(code);
|
||||
|
||||
|
|
52
src/jsapi.c
52
src/jsapi.c
|
@ -27,8 +27,10 @@
|
|||
|
||||
static const char TicMachine[] = "_TIC80";
|
||||
|
||||
void closeJavascript(tic_machine* machine)
|
||||
static void closeJavascript(tic_mem* tic)
|
||||
{
|
||||
tic_machine* machine = (tic_machine*)tic;
|
||||
|
||||
if(machine->js)
|
||||
{
|
||||
duk_destroy_heap(machine->js);
|
||||
|
@ -775,7 +777,7 @@ s32 duk_timeout_check(void* udata)
|
|||
|
||||
static void initDuktape(tic_machine* machine)
|
||||
{
|
||||
closeJavascript(machine);
|
||||
closeJavascript((tic_mem*)machine);
|
||||
|
||||
duk_context* duk = machine->js = duk_create_heap(NULL, NULL, NULL, machine, NULL);
|
||||
|
||||
|
@ -794,8 +796,10 @@ static void initDuktape(tic_machine* machine)
|
|||
}
|
||||
}
|
||||
|
||||
bool initJavascript(tic_machine* machine, const char* code)
|
||||
static bool initJavascript(tic_mem* tic, const char* code)
|
||||
{
|
||||
tic_machine* machine = (tic_machine*)tic;
|
||||
|
||||
initDuktape(machine);
|
||||
duk_context* duktape = machine->js;
|
||||
|
||||
|
@ -809,8 +813,10 @@ bool initJavascript(tic_machine* machine, const char* code)
|
|||
return true;
|
||||
}
|
||||
|
||||
void callJavascriptTick(tic_machine* machine)
|
||||
static void callJavascriptTick(tic_mem* tic)
|
||||
{
|
||||
tic_machine* machine = (tic_machine*)tic;
|
||||
|
||||
const char* TicFunc = ApiKeywords[0];
|
||||
|
||||
duk_context* duk = machine->js;
|
||||
|
@ -832,7 +838,7 @@ void callJavascriptTick(tic_machine* machine)
|
|||
}
|
||||
}
|
||||
|
||||
void callJavascriptScanline(tic_mem* memory, s32 row, void* data)
|
||||
static void callJavascriptScanline(tic_mem* memory, s32 row, void* data)
|
||||
{
|
||||
tic_machine* machine = (tic_machine*)memory;
|
||||
duk_context* duk = machine->js;
|
||||
|
@ -853,7 +859,7 @@ void callJavascriptScanline(tic_mem* memory, s32 row, void* data)
|
|||
else duk_pop(duk);
|
||||
}
|
||||
|
||||
void callJavascriptOverlap(tic_mem* memory, void* data)
|
||||
static void callJavascriptOverlap(tic_mem* memory, void* data)
|
||||
{
|
||||
tic_machine* machine = (tic_machine*)memory;
|
||||
duk_context* duk = machine->js;
|
||||
|
@ -870,4 +876,36 @@ void callJavascriptOverlap(tic_mem* memory, void* data)
|
|||
else duk_pop(duk);
|
||||
}
|
||||
else duk_pop(duk);
|
||||
}
|
||||
}
|
||||
|
||||
static const char* const JsKeywords [] =
|
||||
{
|
||||
"break", "do", "instanceof", "typeof", "case", "else", "new",
|
||||
"var", "catch", "finally", "return", "void", "continue", "for",
|
||||
"switch", "while", "debugger", "function", "this", "with",
|
||||
"default", "if", "throw", "delete", "in", "try", "const"
|
||||
};
|
||||
|
||||
static const tic_script_config JsSyntaxConfig =
|
||||
{
|
||||
.lang = tic_script_js,
|
||||
|
||||
.init = initJavascript,
|
||||
.close = closeJavascript,
|
||||
.tick = callJavascriptTick,
|
||||
.scanline = callJavascriptScanline,
|
||||
.overlap = callJavascriptOverlap,
|
||||
|
||||
.blockCommentStart = "/*",
|
||||
.blockCommentEnd = "*/",
|
||||
.blockStringStart = NULL,
|
||||
.blockStringEnd = NULL,
|
||||
.singleComment = "//",
|
||||
.keywords = JsKeywords,
|
||||
.keywordsCount = COUNT_OF(JsKeywords),
|
||||
};
|
||||
|
||||
const tic_script_config* getJsScriptConfig()
|
||||
{
|
||||
return &JsSyntaxConfig;
|
||||
}
|
||||
|
|
98
src/luaapi.c
98
src/luaapi.c
|
@ -1114,8 +1114,10 @@ static void initAPI(tic_machine* machine)
|
|||
lua_sethook(machine->lua, &checkForceExit, LUA_MASKCOUNT, LUA_LOC_STACK);
|
||||
}
|
||||
|
||||
void closeLua(tic_machine* machine)
|
||||
static void closeLua(tic_mem* tic)
|
||||
{
|
||||
tic_machine* machine = (tic_machine*)tic;
|
||||
|
||||
if(machine->lua)
|
||||
{
|
||||
lua_close(machine->lua);
|
||||
|
@ -1123,27 +1125,21 @@ void closeLua(tic_machine* machine)
|
|||
}
|
||||
}
|
||||
|
||||
bool initLua(tic_machine* machine, const char* code)
|
||||
static bool initLua(tic_mem* tic, const char* code)
|
||||
{
|
||||
closeLua(machine);
|
||||
tic_machine* machine = (tic_machine*)tic;
|
||||
|
||||
closeLua(tic);
|
||||
|
||||
lua_State* lua = machine->lua = luaL_newstate();
|
||||
|
||||
static const luaL_Reg loadedlibs[] =
|
||||
{
|
||||
{ "_G", luaopen_base },
|
||||
//{ LUA_LOADLIBNAME, luaopen_package },
|
||||
{ LUA_COLIBNAME, luaopen_coroutine },
|
||||
{ LUA_TABLIBNAME, luaopen_table },
|
||||
// {LUA_IOLIBNAME, luaopen_io},
|
||||
// {LUA_OSLIBNAME, luaopen_os},
|
||||
{ LUA_STRLIBNAME, luaopen_string },
|
||||
{ LUA_MATHLIBNAME, luaopen_math },
|
||||
// {LUA_UTF8LIBNAME, luaopen_utf8},
|
||||
//{ LUA_DBLIBNAME, luaopen_debug },
|
||||
// #if defined(LUA_COMPAT_BITLIB)
|
||||
// {LUA_BITLIBNAME, luaopen_bit32},
|
||||
// #endif
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
|
@ -1181,9 +1177,10 @@ static const char* execute_moonscript_src = MOON_CODE(
|
|||
return fn()
|
||||
);
|
||||
|
||||
bool initMoonscript(tic_machine* machine, const char* code)
|
||||
static bool initMoonscript(tic_mem* tic, const char* code)
|
||||
{
|
||||
closeLua(machine);
|
||||
tic_machine* machine = (tic_machine*)tic;
|
||||
closeLua(tic);
|
||||
|
||||
lua_State* lua = machine->lua = luaL_newstate();
|
||||
|
||||
|
@ -1245,8 +1242,10 @@ bool initMoonscript(tic_machine* machine, const char* code)
|
|||
return true;
|
||||
}
|
||||
|
||||
void callLuaTick(tic_machine* machine)
|
||||
static void callLuaTick(tic_mem* tic)
|
||||
{
|
||||
tic_machine* machine = (tic_machine*)tic;
|
||||
|
||||
const char* TicFunc = ApiKeywords[0];
|
||||
|
||||
lua_State* lua = machine->lua;
|
||||
|
@ -1267,7 +1266,7 @@ void callLuaTick(tic_machine* machine)
|
|||
}
|
||||
}
|
||||
|
||||
void callLuaScanline(tic_mem* memory, s32 row, void* data)
|
||||
static void callLuaScanline(tic_mem* memory, s32 row, void* data)
|
||||
{
|
||||
tic_machine* machine = (tic_machine*)memory;
|
||||
lua_State* lua = machine->lua;
|
||||
|
@ -1287,7 +1286,7 @@ void callLuaScanline(tic_mem* memory, s32 row, void* data)
|
|||
}
|
||||
}
|
||||
|
||||
void callLuaOverlap(tic_mem* memory, void* data)
|
||||
static void callLuaOverlap(tic_mem* memory, void* data)
|
||||
{
|
||||
tic_machine* machine = (tic_machine*)memory;
|
||||
lua_State* lua = machine->lua;
|
||||
|
@ -1306,3 +1305,70 @@ void callLuaOverlap(tic_mem* memory, void* data)
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
static const char* const LuaKeywords [] =
|
||||
{
|
||||
"and", "break", "do", "else", "elseif",
|
||||
"end", "false", "for", "function", "goto", "if",
|
||||
"in", "local", "nil", "not", "or", "repeat",
|
||||
"return", "then", "true", "until", "while"
|
||||
};
|
||||
|
||||
static const tic_script_config LuaSyntaxConfig =
|
||||
{
|
||||
.lang = tic_script_lua,
|
||||
|
||||
.init = initLua,
|
||||
.close = closeLua,
|
||||
.tick = callLuaTick,
|
||||
.scanline = callLuaScanline,
|
||||
.overlap = callLuaOverlap,
|
||||
|
||||
.blockCommentStart = "--[[",
|
||||
.blockCommentEnd = "]]",
|
||||
.singleComment = "--",
|
||||
.blockStringStart = "[[",
|
||||
.blockStringEnd = "]]",
|
||||
.keywords = LuaKeywords,
|
||||
.keywordsCount = COUNT_OF(LuaKeywords),
|
||||
};
|
||||
|
||||
const tic_script_config* getLuaScriptConfig()
|
||||
{
|
||||
return &LuaSyntaxConfig;
|
||||
}
|
||||
|
||||
static const char* const MoonKeywords [] =
|
||||
{
|
||||
"false", "true", "nil", "return",
|
||||
"break", "continue", "for", "while",
|
||||
"if", "else", "elseif", "unless", "switch",
|
||||
"when", "and", "or", "in", "do",
|
||||
"not", "super", "try", "catch",
|
||||
"with", "export", "import", "then",
|
||||
"from", "class", "extends", "new"
|
||||
};
|
||||
|
||||
static const tic_script_config MoonSyntaxConfig =
|
||||
{
|
||||
.lang = tic_script_moon,
|
||||
|
||||
.init = initMoonscript,
|
||||
.close = closeLua,
|
||||
.tick = callLuaTick,
|
||||
.scanline = callLuaScanline,
|
||||
.overlap = callLuaOverlap,
|
||||
|
||||
.blockCommentStart = NULL,
|
||||
.blockCommentEnd = NULL,
|
||||
.blockStringStart = NULL,
|
||||
.blockStringEnd = NULL,
|
||||
.singleComment = "--",
|
||||
.keywords = MoonKeywords,
|
||||
.keywordsCount = COUNT_OF(MoonKeywords),
|
||||
};
|
||||
|
||||
const tic_script_config* getMoonScriptConfig()
|
||||
{
|
||||
return &MoonSyntaxConfig;
|
||||
}
|
|
@ -82,6 +82,7 @@ typedef struct
|
|||
Channel channels[TIC_SOUND_CHANNELS];
|
||||
} music;
|
||||
|
||||
tic_tick tick;
|
||||
tic_scanline scanline;
|
||||
|
||||
struct
|
||||
|
@ -142,18 +143,6 @@ s32 drawText(tic_mem* memory, const char* text, s32 x, s32 y, s32 width, s32 hei
|
|||
s32 drawSpriteFont(tic_mem* memory, u8 symbol, s32 x, s32 y, s32 width, s32 height, u8 chromakey, s32 scale);
|
||||
s32 drawFixedSpriteFont(tic_mem* memory, u8 index, s32 x, s32 y, s32 width, s32 height, u8 chromakey, s32 scale);
|
||||
|
||||
void closeLua(tic_machine* machine);
|
||||
void closeJavascript(tic_machine* machine);
|
||||
|
||||
bool initMoonscript(tic_machine* machine, const char* code);
|
||||
bool initLua(tic_machine* machine, const char* code);
|
||||
bool initJavascript(tic_machine* machine, const char* code);
|
||||
|
||||
void callLuaTick(tic_machine* machine);
|
||||
void callJavascriptTick(tic_machine* machine);
|
||||
|
||||
void callLuaScanline(tic_mem* memory, s32 row, void* data);
|
||||
void callJavascriptScanline(tic_mem* memory, s32 row, void* data);
|
||||
|
||||
void callLuaOverlap(tic_mem* memory, void* data);
|
||||
void callJavascriptOverlap(tic_mem* memory, void* data);
|
||||
const tic_script_config* getLuaScriptConfig();
|
||||
const tic_script_config* getMoonScriptConfig();
|
||||
const tic_script_config* getJsScriptConfig();
|
||||
|
|
70
src/tic.c
70
src/tic.c
|
@ -559,8 +559,10 @@ void tic_close(tic_mem* memory)
|
|||
|
||||
machine->state.initialized = false;
|
||||
|
||||
closeJavascript(machine);
|
||||
closeLua(machine);
|
||||
getLuaScriptConfig()->close(memory);
|
||||
getMoonScriptConfig()->close(memory);
|
||||
getJsScriptConfig()->close(memory);
|
||||
|
||||
blip_delete(machine->blip);
|
||||
|
||||
free(memory->samples.buffer);
|
||||
|
@ -1500,13 +1502,19 @@ static bool isJavascript(const char* code)
|
|||
return compareMetatag(code, "script", "js") || compareMetatag(code, "script", "javascript");
|
||||
}
|
||||
|
||||
static tic_script_lang api_get_script(tic_mem* memory)
|
||||
static const tic_script_config* getScriptConfig(const char* code)
|
||||
{
|
||||
if(isMoonscript(memory->cart.bank0.code.data)) return tic_script_moon;
|
||||
if(isJavascript(memory->cart.bank0.code.data)) return tic_script_js;
|
||||
return tic_script_lua;
|
||||
if(isMoonscript(code)) return getMoonScriptConfig();
|
||||
if(isJavascript(code)) return getJsScriptConfig();
|
||||
return getLuaScriptConfig();
|
||||
}
|
||||
|
||||
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);
|
||||
|
@ -1527,9 +1535,9 @@ static void updateSaveid(tic_mem* memory)
|
|||
}
|
||||
}
|
||||
|
||||
static void api_tick(tic_mem* memory, tic_tick_data* data)
|
||||
static void api_tick(tic_mem* tic, tic_tick_data* data)
|
||||
{
|
||||
tic_machine* machine = (tic_machine*)memory;
|
||||
tic_machine* machine = (tic_machine*)tic;
|
||||
|
||||
machine->data = data;
|
||||
|
||||
|
@ -1544,7 +1552,7 @@ static void api_tick(tic_mem* memory, tic_tick_data* data)
|
|||
|
||||
for(s32 i = TIC_BANKS - 1; i >= 0; i--)
|
||||
{
|
||||
const char* bankCode = memory->cart.banks[i].code.data;
|
||||
const char* bankCode = tic->cart.banks[i].code.data;
|
||||
|
||||
if(strlen(bankCode))
|
||||
strcat(code, bankCode);
|
||||
|
@ -1554,35 +1562,18 @@ static void api_tick(tic_mem* memory, tic_tick_data* data)
|
|||
data->preprocessor(data->data, code);
|
||||
|
||||
bool done = false;
|
||||
const tic_script_config* config = NULL;
|
||||
|
||||
if(strlen(code))
|
||||
{
|
||||
cart2ram(memory);
|
||||
memory->input = compareMetatag(code, "input", "mouse") ? tic_mouse_input : tic_gamepad_input;
|
||||
cart2ram(tic);
|
||||
tic->input = compareMetatag(code, "input", "mouse") ? tic_mouse_input : tic_gamepad_input;
|
||||
|
||||
if(memory->input == tic_mouse_input)
|
||||
memory->ram.vram.vars.mask.data = 0;
|
||||
if(tic->input == tic_mouse_input)
|
||||
tic->ram.vram.vars.mask.data = 0;
|
||||
|
||||
memory->script = tic_script_lua;
|
||||
|
||||
if (isMoonscript(code))
|
||||
{
|
||||
if(initMoonscript(machine, code))
|
||||
{
|
||||
memory->script = tic_script_moon;
|
||||
done = true;
|
||||
}
|
||||
}
|
||||
else if(isJavascript(code))
|
||||
{
|
||||
if(initJavascript(machine, code))
|
||||
{
|
||||
memory->script = tic_script_js;
|
||||
done = true;
|
||||
}
|
||||
}
|
||||
else if(initLua(machine, code))
|
||||
done = true;
|
||||
config = getScriptConfig(code);
|
||||
done = config->init(tic, code);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1595,17 +1586,17 @@ static void api_tick(tic_mem* memory, tic_tick_data* data)
|
|||
{
|
||||
data->start = data->counter();
|
||||
|
||||
machine->state.scanline = memory->script == tic_script_js ? callJavascriptScanline : callLuaScanline;
|
||||
machine->state.ovr.callback = memory->script == tic_script_js ? callJavascriptOverlap : callLuaOverlap;
|
||||
machine->state.tick = config->tick;
|
||||
machine->state.scanline = config->scanline;
|
||||
machine->state.ovr.callback = config->overlap;
|
||||
|
||||
machine->state.initialized = true;
|
||||
}
|
||||
else return;
|
||||
}
|
||||
}
|
||||
|
||||
memory->script == tic_script_js
|
||||
? callJavascriptTick(machine)
|
||||
: callLuaTick(machine);
|
||||
machine->state.tick(tic);
|
||||
}
|
||||
|
||||
static void api_scanline(tic_mem* memory, s32 row, void* data)
|
||||
|
@ -1877,7 +1868,6 @@ static void initApi(tic_api* api)
|
|||
INIT_API(reset);
|
||||
INIT_API(pause);
|
||||
INIT_API(resume);
|
||||
INIT_API(get_script);
|
||||
INIT_API(sync);
|
||||
INIT_API(btnp);
|
||||
INIT_API(load);
|
||||
|
@ -1886,6 +1876,8 @@ static void initApi(tic_api* api)
|
|||
INIT_API(tick_end);
|
||||
INIT_API(blit);
|
||||
|
||||
INIT_API(get_script_config);
|
||||
|
||||
#undef INIT_API
|
||||
}
|
||||
|
||||
|
|
28
src/ticapi.h
28
src/ticapi.h
|
@ -64,9 +64,34 @@ typedef struct
|
|||
} tic_tick_data;
|
||||
|
||||
typedef struct tic_mem tic_mem;
|
||||
typedef void(*tic_tick)(tic_mem* memory);
|
||||
typedef void(*tic_scanline)(tic_mem* memory, s32 row, void* data);
|
||||
typedef void(*tic_overlap)(tic_mem* memory, void* data);
|
||||
|
||||
typedef struct
|
||||
{
|
||||
tic_script_lang lang;
|
||||
|
||||
struct
|
||||
{
|
||||
bool(*init)(tic_mem* memory, const char* code);
|
||||
void(*close)(tic_mem* memory);
|
||||
|
||||
tic_tick tick;
|
||||
tic_scanline scanline;
|
||||
tic_overlap overlap;
|
||||
};
|
||||
|
||||
const char* blockCommentStart;
|
||||
const char* blockCommentEnd;
|
||||
const char* blockStringStart;
|
||||
const char* blockStringEnd;
|
||||
const char* singleComment;
|
||||
|
||||
const char* const * keywords;
|
||||
s32 keywordsCount;
|
||||
} tic_script_config;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
s32 (*draw_char) (tic_mem* memory, u8 symbol, s32 x, s32 y, u8 color);
|
||||
|
@ -113,7 +138,7 @@ typedef struct
|
|||
void (*tick_end) (tic_mem* memory);
|
||||
void (*blit) (tic_mem* tic, tic_scanline scanline, tic_overlap overlap, void* data);
|
||||
|
||||
tic_script_lang (*get_script)(tic_mem* memory);
|
||||
const tic_script_config* (*get_script_config)(tic_mem* memory);
|
||||
} tic_api;
|
||||
|
||||
struct tic_mem
|
||||
|
@ -122,7 +147,6 @@ struct tic_mem
|
|||
tic_cartridge cart;
|
||||
tic_cartridge config;
|
||||
tic_input_method input;
|
||||
tic_script_lang script;
|
||||
tic_font font;
|
||||
tic_api api;
|
||||
|
||||
|
|
Loading…
Reference in New Issue