From 3cf55046be0bd2f1a60b0403b8c1cc2e66a3f722 Mon Sep 17 00:00:00 2001 From: nesbox Date: Sun, 28 Apr 2024 09:11:48 +0200 Subject: [PATCH] added dlfcn lib to load shared libs --- .gitmodules | 4 + cmake/core.cmake | 48 +++--- cmake/demos.cmake | 24 +-- cmake/studio.cmake | 16 +- src/api.h | 13 +- src/api/js.c | 15 ++ src/api/lua.c | 15 ++ src/core/core.c | 1 - src/core/languages.c | 131 +++++++-------- src/studio/demos.c | 298 ----------------------------------- src/studio/demos.h | 15 -- src/studio/project.c | 2 +- src/studio/screens/console.c | 56 ++++--- src/studio/studio.c | 35 ++++ src/tools.c | 2 +- vendor/dlfcn | 1 + 16 files changed, 228 insertions(+), 448 deletions(-) delete mode 100644 src/studio/demos.c delete mode 100644 src/studio/demos.h create mode 160000 vendor/dlfcn diff --git a/.gitmodules b/.gitmodules index f25489b75..b734b068d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -87,3 +87,7 @@ path = vendor/msf_gif url = https://github.com/notnullnotvoid/msf_gif.git shallow = true +[submodule "vendor/dlfcn"] + path = vendor/dlfcn + url = https://github.com/dlfcn-win32/dlfcn-win32.git + shallow = true diff --git a/cmake/core.cmake b/cmake/core.cmake index 1efcdbd1a..2f839dd28 100644 --- a/cmake/core.cmake +++ b/cmake/core.cmake @@ -44,37 +44,37 @@ macro(MACRO_CORE SCRIPT DEFINE BUILD_DEPRECATED) target_link_libraries(tic80core${SCRIPT} lua) endif() - if(BUILD_WITH_JS) - target_link_libraries(tic80core${SCRIPT} js) - endif() + # if(BUILD_WITH_JS) + # target_link_libraries(tic80core${SCRIPT} js) + # endif() - if(BUILD_WITH_SCHEME) - target_link_libraries(tic80core${SCRIPT} scheme) - endif() + # if(BUILD_WITH_SCHEME) + # target_link_libraries(tic80core${SCRIPT} scheme) + # endif() - if(BUILD_WITH_SQUIRREL) - target_link_libraries(tic80core${SCRIPT} squirrel) - endif() + # if(BUILD_WITH_SQUIRREL) + # target_link_libraries(tic80core${SCRIPT} squirrel) + # endif() - if(BUILD_WITH_PYTHON) - target_link_libraries(tic80core${SCRIPT} python) - endif() + # if(BUILD_WITH_PYTHON) + # target_link_libraries(tic80core${SCRIPT} python) + # endif() - if(BUILD_WITH_WREN) - target_link_libraries(tic80core${SCRIPT} wren) - endif() + # if(BUILD_WITH_WREN) + # target_link_libraries(tic80core${SCRIPT} wren) + # endif() - if(BUILD_WITH_MRUBY) - target_link_libraries(tic80core${SCRIPT} ruby) - endif() + # if(BUILD_WITH_MRUBY) + # target_link_libraries(tic80core${SCRIPT} ruby) + # endif() - if(BUILD_WITH_JANET) - target_link_libraries(tic80core${SCRIPT} janet) - endif() + # if(BUILD_WITH_JANET) + # target_link_libraries(tic80core${SCRIPT} janet) + # endif() - if(BUILD_WITH_WASM) - target_link_libraries(tic80core${SCRIPT} wasm) - endif() + # if(BUILD_WITH_WASM) + # target_link_libraries(tic80core${SCRIPT} wasm) + # endif() if(${BUILD_DEPRECATED}) target_compile_definitions(tic80core${SCRIPT} PRIVATE BUILD_DEPRECATED) diff --git a/cmake/demos.cmake b/cmake/demos.cmake index 577913f2b..fe1fb0358 100644 --- a/cmake/demos.cmake +++ b/cmake/demos.cmake @@ -1,19 +1,19 @@ -if(BUILD_DEMO_CARTS) +# if(BUILD_DEMO_CARTS) - foreach(CART_FILE ${DEMO_CARTS}) +# foreach(CART_FILE ${DEMO_CARTS}) - get_filename_component(CART_NAME ${CART_FILE} NAME_WE) +# get_filename_component(CART_NAME ${CART_FILE} NAME_WE) - set(OUTNAME ${CMAKE_SOURCE_DIR}/build/assets/${CART_NAME}.tic.dat) - set(OUTPRJ ${CMAKE_SOURCE_DIR}/build/${CART_NAME}.tic) +# set(OUTNAME ${CMAKE_SOURCE_DIR}/build/assets/${CART_NAME}.tic.dat) +# set(OUTPRJ ${CMAKE_SOURCE_DIR}/build/${CART_NAME}.tic) - list(APPEND DEMO_CARTS_OUT ${OUTNAME}) +# list(APPEND DEMO_CARTS_OUT ${OUTNAME}) - add_custom_command(OUTPUT ${OUTNAME} - COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/prj2cart ${CART_FILE} ${OUTPRJ} && ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/bin2txt ${OUTPRJ} ${OUTNAME} -z - DEPENDS bin2txt prj2cart ${CART_FILE} - ) +# add_custom_command(OUTPUT ${OUTNAME} +# COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/prj2cart ${CART_FILE} ${OUTPRJ} && ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/bin2txt ${OUTPRJ} ${OUTNAME} -z +# DEPENDS bin2txt prj2cart ${CART_FILE} +# ) - endforeach(CART_FILE) +# endforeach(CART_FILE) -endif() \ No newline at end of file +# endif() \ No newline at end of file diff --git a/cmake/studio.cmake b/cmake/studio.cmake index 1d3e97e4c..749eb2c72 100644 --- a/cmake/studio.cmake +++ b/cmake/studio.cmake @@ -18,7 +18,6 @@ set(TIC80STUDIO_SRC ${TIC80LIB_DIR}/studio/editors/music.c ${TIC80LIB_DIR}/studio/studio.c ${TIC80LIB_DIR}/studio/config.c - ${TIC80LIB_DIR}/studio/demos.c ${TIC80LIB_DIR}/studio/fs.c ${TIC80LIB_DIR}/studio/net.c ${TIC80LIB_DIR}/ext/md5.c @@ -33,22 +32,31 @@ endif() set(TIC80_OUTPUT tic80) + add_library(tic80studio STATIC ${TIC80STUDIO_SRC} ${DEMO_CARTS_OUT} ${CMAKE_SOURCE_DIR}/build/assets/cart.png.dat) if(WIN32) - target_include_directories(tic80studio PRIVATE ${THIRDPARTY_DIR}/dirent/include) + add_library(dlfcn STATIC ${THIRDPARTY_DIR}/dlfcn/src/dlfcn.c) + + target_link_libraries(tic80studio PRIVATE dlfcn) + + target_include_directories(tic80studio + PRIVATE + ${THIRDPARTY_DIR}/dirent/include + ${THIRDPARTY_DIR}/dlfcn/src + ) endif() target_include_directories(tic80studio PUBLIC ${CMAKE_CURRENT_BINARY_DIR}) -target_link_libraries(tic80studio tic80core zip wave_writer argparse giflib png) +target_link_libraries(tic80studio PUBLIC tic80core PRIVATE zip wave_writer argparse giflib png) if(USE_NAETT) target_compile_definitions(tic80studio PRIVATE USE_NAETT) - target_link_libraries(tic80studio naett) + target_link_libraries(tic80studio PRIVATE naett) endif() if(BUILD_PRO) diff --git a/src/api.h b/src/api.h index d3431176d..2d1d31794 100644 --- a/src/api.h +++ b/src/api.h @@ -26,10 +26,10 @@ #include "tic.h" #include "time.h" -// convenience macros to loop languages -#define FOR_EACH_LANG(ln) for (tic_script_config** conf = Languages ; *conf != NULL; conf++ ) { tic_script_config* ln = *conf; -#define FOR_EACH_LANG_END } +#define MAX_SUPPORTED_LANGS (16) +// convenience macros to loop languages +#define FOR_EACH_LANG(ln) for(tic_script_config **conf = Languages, *ln = *conf; *conf != NULL; ln = *++conf) typedef struct { u8 index; tic_flip flip; tic_rotate rotate; } RemapResult; typedef void(*RemapFunc)(void*, s32 x, s32 y, RemapResult* result); @@ -112,10 +112,15 @@ typedef struct s32 api_keywordsCount; const char** api_keywords; + + const void* demoRom; + const s32 demoRomSize; + const void* markRom; + const s32 markRomSize; } tic_script_config; -extern tic_script_config* Languages[]; +extern tic_script_config** Languages; typedef enum { diff --git a/src/api/js.c b/src/api/js.c index dd95c9d74..f8f863c1b 100644 --- a/src/api/js.c +++ b/src/api/js.c @@ -1254,6 +1254,16 @@ static void evalJs(tic_mem* tic, const char* code) core->data->error(core->data->data, "TODO: JS eval not yet implemented\n."); } +static const u8 JsDemoRom[] = +{ + #include "../build/assets/jsdemo.tic.dat" +}; + +static const u8 jsmark[] = +{ + #include "../build/assets/jsmark.tic.dat" +}; + const tic_script_config JsSyntaxConfig = { .id = 12, @@ -1287,4 +1297,9 @@ const tic_script_config JsSyntaxConfig = .keywords = JsKeywords, .keywordsCount = COUNT_OF(JsKeywords), + + .demoRom = JsDemoRom, + .demoRomSize = sizeof JsDemoRom, + .markRom = jsmark, + .markRomSize = sizeof jsmark, }; diff --git a/src/api/lua.c b/src/api/lua.c index 2b76fac5f..7e3b3b2c5 100644 --- a/src/api/lua.c +++ b/src/api/lua.c @@ -1830,6 +1830,16 @@ static void evalLua(tic_mem* tic, const char* code) { } } +static const u8 LuaDemoRom[] = +{ + #include "../build/assets/luademo.tic.dat" +}; + +static const u8 LuaMarkRom[] = +{ + #include "../build/assets/luamark.tic.dat" +}; + tic_script_config LuaSyntaxConfig = { .id = 10, @@ -1865,4 +1875,9 @@ tic_script_config LuaSyntaxConfig = .keywords = LuaKeywords, .keywordsCount = COUNT_OF(LuaKeywords), + + .demoRom = LuaDemoRom, + .demoRomSize = sizeof LuaDemoRom, + .markRom = LuaMarkRom, + .markRomSize = sizeof LuaMarkRom, }; diff --git a/src/core/core.c b/src/core/core.c index f49057f4f..1aeaa85b2 100644 --- a/src/core/core.c +++ b/src/core/core.c @@ -266,7 +266,6 @@ const tic_script_config* tic_core_script_config(tic_mem* memory) if(it->id == memory->cart.lang || compareMetatag(memory->cart.code.data, "script", it->name, it->singleComment)) return it; } - FOR_EACH_LANG_END return Languages[0]; } diff --git a/src/core/languages.c b/src/core/languages.c index 56bd1acff..44b25bc3b 100644 --- a/src/core/languages.c +++ b/src/core/languages.c @@ -1,96 +1,97 @@ #include #include "api.h" -#if defined(TIC_BUILD_WITH_MRUBY) -extern tic_script_config MRubySyntaxConfig; -#endif - -#if defined(TIC_BUILD_WITH_JS) -extern tic_script_config JsSyntaxConfig; -#endif - #if defined (TIC_BUILD_WITH_LUA) extern tic_script_config LuaSyntaxConfig; #endif -#if defined(TIC_BUILD_WITH_MOON) -extern tic_script_config MoonSyntaxConfig; -#endif +// #if defined(TIC_BUILD_WITH_MRUBY) +// extern tic_script_config MRubySyntaxConfig; +// #endif -#if defined(TIC_BUILD_WITH_FENNEL) -extern tic_script_config FennelSyntaxConfig; -#endif +// #if defined(TIC_BUILD_WITH_JS) +// extern tic_script_config JsSyntaxConfig; +// #endif -#if defined(TIC_BUILD_WITH_SQUIRREL) -extern tic_script_config SquirrelSyntaxConfig; -#endif -#if defined(TIC_BUILD_WITH_SCHEME) -extern tic_script_config SchemeSyntaxConfig; -#endif +// #if defined(TIC_BUILD_WITH_MOON) +// extern tic_script_config MoonSyntaxConfig; +// #endif -#if defined(TIC_BUILD_WITH_WREN) -extern tic_script_config WrenSyntaxConfig; -#endif +// #if defined(TIC_BUILD_WITH_FENNEL) +// extern tic_script_config FennelSyntaxConfig; +// #endif -#if defined(TIC_BUILD_WITH_WASM) -extern tic_script_config WasmSyntaxConfig; -#endif +// #if defined(TIC_BUILD_WITH_SQUIRREL) +// extern tic_script_config SquirrelSyntaxConfig; +// #endif -#if defined(TIC_BUILD_WITH_JANET) -extern tic_script_config JanetSyntaxConfig; -#endif +// #if defined(TIC_BUILD_WITH_SCHEME) +// extern tic_script_config SchemeSyntaxConfig; +// #endif -#if defined(TIC_BUILD_WITH_PYTHON) -extern tic_script_config PythonSyntaxConfig; -#endif +// #if defined(TIC_BUILD_WITH_WREN) +// extern tic_script_config WrenSyntaxConfig; +// #endif + +// #if defined(TIC_BUILD_WITH_WASM) +// extern tic_script_config WasmSyntaxConfig; +// #endif + +// #if defined(TIC_BUILD_WITH_JANET) +// extern tic_script_config JanetSyntaxConfig; +// #endif -tic_script_config* Languages[] = +// #if defined(TIC_BUILD_WITH_PYTHON) +// extern tic_script_config PythonSyntaxConfig; +// #endif + +static tic_script_config* DefaultLanguages[MAX_SUPPORTED_LANGS + 1] = { #if defined (TIC_BUILD_WITH_LUA) &LuaSyntaxConfig, #endif - #if defined(TIC_BUILD_WITH_MRUBY) - &MRubySyntaxConfig, - #endif + // #if defined(TIC_BUILD_WITH_MRUBY) + // &MRubySyntaxConfig, + // #endif - #if defined(TIC_BUILD_WITH_JS) - &JsSyntaxConfig, - #endif + // #if defined(TIC_BUILD_WITH_JS) + // &JsSyntaxConfig, + // #endif - #if defined(TIC_BUILD_WITH_MOON) - &MoonSyntaxConfig, - #endif + // #if defined(TIC_BUILD_WITH_MOON) + // &MoonSyntaxConfig, + // #endif - #if defined(TIC_BUILD_WITH_FENNEL) - &FennelSyntaxConfig, - #endif + // #if defined(TIC_BUILD_WITH_FENNEL) + // &FennelSyntaxConfig, + // #endif - #if defined(TIC_BUILD_WITH_SCHEME) - &SchemeSyntaxConfig, - #endif + // #if defined(TIC_BUILD_WITH_SCHEME) + // &SchemeSyntaxConfig, + // #endif - #if defined(TIC_BUILD_WITH_SQUIRREL) - &SquirrelSyntaxConfig, - #endif + // #if defined(TIC_BUILD_WITH_SQUIRREL) + // &SquirrelSyntaxConfig, + // #endif - #if defined(TIC_BUILD_WITH_WREN) - &WrenSyntaxConfig, - #endif - - #if defined(TIC_BUILD_WITH_WASM) - &WasmSyntaxConfig, - #endif + // #if defined(TIC_BUILD_WITH_WREN) + // &WrenSyntaxConfig, + // #endif - #if defined(TIC_BUILD_WITH_JANET) - &JanetSyntaxConfig, - #endif + // #if defined(TIC_BUILD_WITH_WASM) + // &WasmSyntaxConfig, + // #endif - #if defined(TIC_BUILD_WITH_PYTHON) - &PythonSyntaxConfig, - #endif + // #if defined(TIC_BUILD_WITH_JANET) + // &JanetSyntaxConfig, + // #endif - NULL + // #if defined(TIC_BUILD_WITH_PYTHON) + // &PythonSyntaxConfig, + // #endif }; + +tic_script_config **Languages = DefaultLanguages; diff --git a/src/studio/demos.c b/src/studio/demos.c deleted file mode 100644 index c70827132..000000000 --- a/src/studio/demos.c +++ /dev/null @@ -1,298 +0,0 @@ -#include -#include -#include -#include "demos.h" -#include "api.h" - -#if defined (TIC_BUILD_WITH_LUA) -static const u8 LuaDemoRom[] = -{ - #include "../build/assets/luademo.tic.dat" -}; -static const u8 LuaMarkRom[] = -{ - #include "../build/assets/luamark.tic.dat" -}; -tic_script_config_extra LuaSyntaxConfigExtra = -{ - .name = "lua", - .demoRom = LuaDemoRom, - .demoRomSize = sizeof LuaDemoRom, - .markRom = LuaMarkRom, - .markRomSize = sizeof LuaMarkRom, -}; -#endif - -#if defined (TIC_BUILD_WITH_MOON) -static const u8 MoonDemoRom[] = -{ - #include "../build/assets/moondemo.tic.dat" -}; -static const u8 MoonMarkRom[] = -{ - #include "../build/assets/moonmark.tic.dat" -}; -tic_script_config_extra MoonSyntaxConfigExtra = -{ - .name = "moon", - .demoRom = MoonDemoRom, - .demoRomSize = sizeof MoonDemoRom, - .markRom = MoonMarkRom, - .markRomSize = sizeof MoonMarkRom, -}; -#endif - -#if defined (TIC_BUILD_WITH_FENNEL) -static const u8 FennelDemoRom[] = -{ - #include "../build/assets/fenneldemo.tic.dat" -}; -/* does not exists -static const u8 FennelMarkRom[] = -{ - #include "../build/assets/fennelmark.tic.dat" -}; -*/ - -tic_script_config_extra FennelSyntaxConfigExtra = -{ - .name = "fennel", - .demoRom = FennelDemoRom, - .demoRomSize = sizeof FennelDemoRom, - .markRom = NULL, - .markRomSize = 0, -}; -#endif - - -#if defined(TIC_BUILD_WITH_JS) - -static const u8 JsDemoRom[] = -{ - #include "../build/assets/jsdemo.tic.dat" -}; - -static const u8 jsmark[] = -{ - #include "../build/assets/jsmark.tic.dat" -}; - -tic_script_config_extra JsSyntaxConfigExtra = -{ - .name = "js", - .demoRom = JsDemoRom, - .demoRomSize = sizeof JsDemoRom, - .markRom = jsmark, - .markRomSize = sizeof jsmark, -}; - -#endif - -#if defined(TIC_BUILD_WITH_MRUBY) - -static const u8 RubyDemoRom[] = -{ - #include "../build/assets/rubydemo.tic.dat" -}; - -static const u8 rubymark[] = -{ - #include "../build/assets/rubymark.tic.dat" -}; - -tic_script_config_extra MRubySyntaxConfigExtra = -{ - .name = "ruby", - .demoRom = RubyDemoRom, - .demoRomSize = sizeof RubyDemoRom, - .markRom = rubymark, - .markRomSize = sizeof rubymark, -}; - -#endif - -#if defined(TIC_BUILD_WITH_WREN) - -static const u8 WrenDemoRom[] = -{ - #include "../build/assets/wrendemo.tic.dat" -}; - -static const u8 wrenmark[] = -{ - #include "../build/assets/wrenmark.tic.dat" -}; - -tic_script_config_extra WrenSyntaxConfigExtra = -{ - .name = "wren", - .demoRom = WrenDemoRom, - .demoRomSize = sizeof WrenDemoRom, - .markRom = wrenmark, - .markRomSize = sizeof wrenmark, -}; - -#endif - -#if defined (TIC_BUILD_WITH_SCHEME) -static const u8 SchemeDemoRom[] = -{ - #include "../build/assets/schemedemo.tic.dat" -}; - -static const u8 schememark[] = -{ - #include "../build/assets/schememark.tic.dat" -}; -tic_script_config_extra SchemeSyntaxConfigExtra = -{ - .name = "scheme", - .demoRom = SchemeDemoRom, - .demoRomSize = sizeof SchemeDemoRom, - .markRom = schememark, - .markRomSize = sizeof schememark, -}; -#endif - - -#if defined (TIC_BUILD_WITH_SQUIRREL) -static const u8 SquirrelDemoRom[] = -{ - #include "../build/assets/squirreldemo.tic.dat" -}; - -static const u8 squirrelmark[] = -{ - #include "../build/assets/squirrelmark.tic.dat" -}; -tic_script_config_extra SquirrelSyntaxConfigExtra = -{ - .name = "squirrel", - .demoRom = SquirrelDemoRom, - .demoRomSize = sizeof SquirrelDemoRom, - .markRom = squirrelmark, - .markRomSize = sizeof squirrelmark, -}; -#endif - - -#if defined(TIC_BUILD_WITH_WASM) - -static const u8 WasmDemoRom[] = -{ - #include "../build/assets/wasmdemo.tic.dat" -}; - -static const u8 wasmmark[] = -{ - #include "../build/assets/wasmmark.tic.dat" -}; - -tic_script_config_extra WasmSyntaxConfigExtra = -{ - .name = "wasm", - .demoRom = WasmDemoRom, - .demoRomSize = sizeof WasmDemoRom, - .markRom = wasmmark, - .markRomSize = sizeof wasmmark, -}; - -#endif - -#if defined(TIC_BUILD_WITH_JANET) - -static const u8 JanetDemoRom[] = - { -#include "../build/assets/janetdemo.tic.dat" - }; - -static const u8 janetmark[] = - { -#include "../build/assets/janetmark.tic.dat" - }; - -tic_script_config_extra JanetSyntaxConfigExtra = - { - .name = "janet", - .demoRom = JanetDemoRom, - .demoRomSize = sizeof JanetDemoRom, - .markRom = janetmark, - .markRomSize = sizeof janetmark, - }; - -#endif - -#if defined(TIC_BUILD_WITH_PYTHON) - -static const u8 PythonDemoRom[] = - { -#include "../build/assets/pythondemo.tic.dat" - }; - -static const u8 pythonmark[] = - { -#include "../build/assets/pythonmark.tic.dat" - }; - -tic_script_config_extra PythonSyntaxConfigExtra = - { - .name = "python", - .demoRom = PythonDemoRom, - .demoRomSize = sizeof PythonDemoRom, - .markRom = pythonmark, - .markRomSize = sizeof pythonmark, - }; - -#endif - - -tic_script_config_extra* getConfigExtra(const tic_script_config* config) -{ - - for (tic_script_config_extra** conf = LanguagesExtra ; *conf != NULL; conf++ ) { - tic_script_config_extra* ln = *conf; - if (strcmp(config->name, ln->name) == 0) - { - return ln; - } - } - return NULL; -} - -tic_script_config_extra* LanguagesExtra[] = { -#if defined(TIC_BUILD_WITH_LUA) - &LuaSyntaxConfigExtra, -#endif -#if defined(TIC_BUILD_WITH_MOON) - &MoonSyntaxConfigExtra, -#endif -#if defined(TIC_BUILD_WITH_FENNEL) - &FennelSyntaxConfigExtra, -#endif -#if defined(TIC_BUILD_WITH_WREN) - &WrenSyntaxConfigExtra, -#endif -#if defined(TIC_BUILD_WITH_SCHEME) - &SchemeSyntaxConfigExtra, -#endif - -#if defined(TIC_BUILD_WITH_SQUIRREL) - &SquirrelSyntaxConfigExtra, -#endif -#if defined(TIC_BUILD_WITH_JS) - &JsSyntaxConfigExtra, -#endif -#if defined(TIC_BUILD_WITH_MRUBY) - &MRubySyntaxConfigExtra, -#endif -#if defined(TIC_BUILD_WITH_WASM) - &WasmSyntaxConfigExtra, -#endif -#if defined(TIC_BUILD_WITH_JANET) - &JanetSyntaxConfigExtra, -#endif -#if defined(TIC_BUILD_WITH_PYTHON) - &PythonSyntaxConfigExtra, -#endif - NULL -}; diff --git a/src/studio/demos.h b/src/studio/demos.h deleted file mode 100644 index 04a53445b..000000000 --- a/src/studio/demos.h +++ /dev/null @@ -1,15 +0,0 @@ -#include "api.h" - -typedef struct -{ - const char* name; - const void* demoRom; - const s32 demoRomSize; - const void* markRom; - const s32 markRomSize; -} tic_script_config_extra; - - -extern tic_script_config_extra* LanguagesExtra[]; - -tic_script_config_extra* getConfigExtra(const tic_script_config* config); diff --git a/src/studio/project.c b/src/studio/project.c index c02dbbc97..f71d0774a 100644 --- a/src/studio/project.c +++ b/src/studio/project.c @@ -123,7 +123,7 @@ static const char* projectComment(const char* name) if(tic_tool_has_ext(name, ln->fileExtension)) return ln->projectComment; } - FOR_EACH_LANG_END + return Languages[0]->projectComment; } diff --git a/src/studio/screens/console.c b/src/studio/screens/console.c index fd27da8b0..725e7501d 100644 --- a/src/studio/screens/console.c +++ b/src/studio/screens/console.c @@ -28,7 +28,6 @@ #include "studio/config.h" #include "ext/png.h" #include "zip.h" -#include "studio/demos.h" #include "retro_endianness.h" #if defined(TIC80_PRO) @@ -269,6 +268,7 @@ static char* replaceHelpTokens(const char* text) char langnamespipe[10240] = {0}; FOR_EACH_LANG(ln) + { bool isLast = *(conf+1) == NULL; bool isSecondToLast = *(conf+2) == NULL; @@ -282,7 +282,7 @@ static char* replaceHelpTokens(const char* text) strcat(langnamespipe, ln->name); if (!isLast) strcat(langnamespipe, "|"); - FOR_EACH_LANG_END + } char* replaced1 = str_replace(text, "$LANG_NAMES$", langnames); char* replaced2 = str_replace(replaced1, "$LANG_EXTENSIONS$", langextensions); @@ -653,19 +653,19 @@ static char* getDemoCartPath(char* path, tic_script_config* script) static void* getDemoCart(Console* console, tic_script_config* script, s32* size) { - char path[1024]; - getDemoCartPath(path, script); + // !TODO: temporary disabled custom demo + // char path[1024]; + // getDemoCartPath(path, script); - { - void* data = tic_fs_loadroot(console->fs, path, size); + // { + // void* data = tic_fs_loadroot(console->fs, path, size); - if(data && *size) - return data; - } - tic_script_config_extra* ex = getConfigExtra(script); + // if(data && *size) + // return data; + // } - const u8* demo = ex->demoRom; - s32 romSize = ex->demoRomSize; + const u8* demo = script->demoRom; + s32 romSize = script->demoRomSize; u8* data = calloc(1, sizeof(tic_cartridge)); @@ -673,8 +673,8 @@ static void* getDemoCart(Console* console, tic_script_config* script, s32* size) { *size = tic_tool_unzip(data, sizeof(tic_cartridge), demo, romSize); - if(*size) - tic_fs_saveroot(console->fs, path, data, *size, false); + // if(*size) + // tic_fs_saveroot(console->fs, path, data, *size, false); } return data; @@ -1093,17 +1093,26 @@ static void onNewCommandConfirmed(Console* console) { bool done = false; - if(console->desc->count) + s32 count = 0; + FOR_EACH_LANG(_) count++; + + if(count == 1) + { + loadDemo(console, *Languages); + done = true; + } + else if(console->desc->count) { const char* param = console->desc->params->key; FOR_EACH_LANG(ln) + { if(strcmp(param, ln->name) == 0) { loadDemo(console, ln); done = true; - } - FOR_EACH_LANG_END + } + } if(!done) { @@ -1258,8 +1267,10 @@ static void finishTabComplete(const TabCompleteData* data) static void tabCompleteLanguages(TabCompleteData* data) { FOR_EACH_LANG(ln) + { addTabCompleteOption(data, ln->name); - FOR_EACH_LANG_END + } + finishTabComplete(data); } @@ -1625,20 +1636,18 @@ static void onInstallDemosCommand(Console* console) FOR_EACH_LANG(ln) { - tic_script_config_extra* ex = getConfigExtra(ln); - if (ex->markRom != NULL) { // having a Mark is not mandatory + if (ln->markRom != NULL) { // having a Mark is not mandatory char cartname[1024]; strcpy(cartname, ln->name); strcat(cartname, "mark.tic"); - tic_fs_save(fs, cartname, data, tic_tool_unzip(data, sizeof(tic_cartridge), ex->markRom, ex->markRomSize), true); + tic_fs_save(fs, cartname, data, tic_tool_unzip(data, sizeof(tic_cartridge), ln->markRom, ln->markRomSize), true); printFront(console, Bunny); printFront(console, "/"); printFront(console, cartname); printLine(console); } } - FOR_EACH_LANG_END tic_fs_dirback(fs); } @@ -1689,9 +1698,10 @@ static void onConfigCommand(Console* console) else { FOR_EACH_LANG(script) + { if (strcmp(console->desc->params[1].key, script->name) == 0) onLoadDemoCommand(console, script); - FOR_EACH_LANG_END + } } } else diff --git a/src/studio/studio.c b/src/studio/studio.c index 7a1cd756e..a34f92f82 100644 --- a/src/studio/studio.c +++ b/src/studio/studio.c @@ -58,6 +58,8 @@ #define _USE_MATH_DEFINES #include +#include + #define MD5_HASHSIZE 16 #if defined(TIC80_PRO) @@ -2431,6 +2433,37 @@ bool studio_alive(Studio* studio) return studio->alive; } +static void loadLangs() +{ + const char *module_name = "js.dll"; + void *module = dlopen(module_name, RTLD_NOW | RTLD_LOCAL); + + if(module) + { + const tic_script_config *config = dlsym(module, "JsSyntaxConfig"); + + if(config) + { + printf("config is loaded: %s\n", config->name); + + s32 count = 0; + FOR_EACH_LANG(_) count++; + + if(count < MAX_SUPPORTED_LANGS) + { + Languages[count] = config; + } + } + else + { + printf("error: %s\n", "get_script_config not found"); + } + + // !TODO: clean all the modules! + // dlclose(module); + } +} + Studio* studio_create(s32 argc, char **argv, s32 samplerate, tic80_pixel_color_format format, const char* folder, s32 maxscale) { setbuf(stdout, NULL); @@ -2443,6 +2476,8 @@ Studio* studio_create(s32 argc, char **argv, s32 samplerate, tic80_pixel_color_f exit(0); } + loadLangs(); + Studio* studio = NEW(Studio); *studio = (Studio) { diff --git a/src/tools.c b/src/tools.c index 6eac4d189..41861a6a8 100644 --- a/src/tools.c +++ b/src/tools.c @@ -135,7 +135,7 @@ bool tic_project_ext(const char* name) if(tic_tool_has_ext(name, ln->fileExtension)) return true; } - FOR_EACH_LANG_END + return false; } diff --git a/vendor/dlfcn b/vendor/dlfcn new file mode 160000 index 000000000..048bff80f --- /dev/null +++ b/vendor/dlfcn @@ -0,0 +1 @@ +Subproject commit 048bff80f2bd00bb651bcc3357cb6f76e3d76fd5