diff --git a/src/console.c b/src/console.c index 277f0d2..05bd661 100644 --- a/src/console.c +++ b/src/console.c @@ -511,9 +511,19 @@ static void onCartLoaded(Console* console, const char* name) #if defined(TIC80_PRO) -static const char* getProjectName(const char* name) +static bool hasExt(const char* name, const char* ext) { - return getName(name, PROJECT_EXT); + return strcmp(name + strlen(name) - strlen(ext), ext) == 0; +} + +static bool hasProjectExt(const char* name) +{ + return hasExt(name, PROJECT_LUA_EXT) || hasExt(name, PROJECT_MOON_EXT) || hasExt(name, PROJECT_JS_EXT); +} + +static const char* projectComment(const char* name) +{ + return hasExt(name, PROJECT_JS_EXT) ? "//" : "--"; } static void buf2str(const void* data, s32 size, char* ptr, bool flip) @@ -553,12 +563,12 @@ static char* saveTextSection(char* ptr, const char* data) return ptr; } -static char* saveBinaryBuffer(char* ptr, const void* data, s32 size, s32 row, bool flip) +static char* saveBinaryBuffer(char* ptr, const char* comment, const void* data, s32 size, s32 row, bool flip) { if(bufferEmpty(data, size)) return ptr; - sprintf(ptr, "-- %03i:", row); + sprintf(ptr, "%s %03i:", comment, row); ptr += strlen(ptr); buf2str(data, size, ptr, flip); @@ -570,18 +580,18 @@ static char* saveBinaryBuffer(char* ptr, const void* data, s32 size, s32 row, bo return ptr; } -static char* saveBinarySection(char* ptr, const char* tag, s32 count, const void* data, s32 size, bool flip) +static char* saveBinarySection(char* ptr, const char* comment, const char* tag, s32 count, const void* data, s32 size, bool flip) { if(bufferEmpty(data, size * count)) return ptr; - sprintf(ptr, "\n-- <%s>\n", tag); + sprintf(ptr, "%s <%s>\n", comment, tag); ptr += strlen(ptr); for(s32 i = 0; i < count; i++, data = (u8*)data + size) - ptr = saveBinaryBuffer(ptr, data, size, i, flip); + ptr = saveBinaryBuffer(ptr, comment, data, size, i, flip); - sprintf(ptr, "-- \n", tag); + sprintf(ptr, "%s \n\n", comment, tag); ptr += strlen(ptr); return ptr; @@ -600,7 +610,7 @@ static const BinarySection BinarySections[] = {"TRACKS", MUSIC_TRACKS, offsetof(tic_cartridge, sound.music.tracks), sizeof(tic_track), true}, }; -static s32 saveProject(Console* console, void* buffer) +static s32 saveProject(Console* console, void* buffer, const char* comment) { tic_mem* tic = console->tic; @@ -610,15 +620,15 @@ static s32 saveProject(Console* console, void* buffer) for(s32 i = 0; i < COUNT_OF(BinarySections); i++) { const BinarySection* section = &BinarySections[i]; - ptr = saveBinarySection(ptr, section->tag, section->count, (u8*)&tic->cart + section->offset, section->size, section->flip); + ptr = saveBinarySection(ptr, comment, section->tag, section->count, (u8*)&tic->cart + section->offset, section->size, section->flip); } - saveBinarySection(ptr, "COVER", 1, &tic->cart.cover, tic->cart.cover.size + sizeof(s32), true); + saveBinarySection(ptr, comment, "COVER", 1, &tic->cart.cover, tic->cart.cover.size + sizeof(s32), true); return strlen(stream); } -static bool loadTextSection(const char* project, void* dst, s32 size) +static bool loadTextSection(const char* project, const char* comment, void* dst, s32 size) { bool done = false; @@ -630,7 +640,7 @@ static bool loadTextSection(const char* project, void* dst, s32 size) for(s32 i = 0; i < COUNT_OF(BinarySections); i++) { - sprintf(tagbuf, "-- <%s>\n", BinarySections[i].tag); + sprintf(tagbuf, "\n%s <%s>\n", comment, BinarySections[i].tag); const char* ptr = SDL_strstr(project, tagbuf); @@ -648,10 +658,10 @@ static bool loadTextSection(const char* project, void* dst, s32 size) return done; } -static bool loadBinarySection(const char* project, const char* tag, s32 count, void* dst, s32 size, bool flip) +static bool loadBinarySection(const char* project, const char* comment, const char* tag, s32 count, void* dst, s32 size, bool flip) { char tagbuf[64]; - sprintf(tagbuf, "-- <%s>\n", tag); + sprintf(tagbuf, "%s <%s>\n", comment, tag); const char* start = SDL_strstr(project, tagbuf); bool done = false; @@ -660,7 +670,7 @@ static bool loadBinarySection(const char* project, const char* tag, s32 count, v { start += strlen(tagbuf); - sprintf(tagbuf, "\n-- ", tag); + sprintf(tagbuf, "\n%s ", comment, tag); const char* end = SDL_strstr(start, tagbuf); if(end > start) @@ -697,7 +707,7 @@ static bool loadBinarySection(const char* project, const char* tag, s32 count, v return done; } -static bool loadProject(Console* console, const char* data, s32 size, tic_cartridge* dst) +static bool loadProject(Console* console, const char* name, const char* data, s32 size, tic_cartridge* dst) { tic_mem* tic = console->tic; @@ -723,17 +733,19 @@ static bool loadProject(Console* console, const char* data, s32 size, tic_cartri SDL_memset(cart, 0, sizeof(tic_cartridge)); SDL_memcpy(&cart->palette, &tic->config.palette.data, sizeof(tic_palette)); - if(loadTextSection(project, cart->code.data, sizeof(tic_code))) + const char* comment = projectComment(name); + + if(loadTextSection(project, comment, cart->code.data, sizeof(tic_code))) done = true; for(s32 i = 0; i < COUNT_OF(BinarySections); i++) { const BinarySection* section = &BinarySections[i]; - if(loadBinarySection(project, section->tag, section->count, (u8*)cart + section->offset, section->size, section->flip)) + if(loadBinarySection(project, comment, section->tag, section->count, (u8*)cart + section->offset, section->size, section->flip)) done = true; } - if(loadBinarySection(project, "COVER", 1, &cart->cover, -1, true)) + if(loadBinarySection(project, comment, "COVER", 1, &cart->cover, -1, true)) done = true; SDL_memcpy(dst, cart, sizeof(tic_cartridge)); @@ -762,7 +774,7 @@ static void updateProject(Console* console) if(cart) { - if(loadProject(console, data, size, cart)) + if(loadProject(console, console->romName, data, size, cart)) { SDL_memcpy(&tic->cart, cart, sizeof(tic_cartridge)); @@ -777,11 +789,6 @@ static void updateProject(Console* console) } } -static bool hasExt(const char* name, const char* ext) -{ - return strcmp(name + strlen(name) - strlen(ext), ext) == 0; -} - #endif static void onConsoleLoadCommandConfirmed(Console* console, const char* param) @@ -810,13 +817,19 @@ static void onConsoleLoadCommandConfirmed(Console* console, const char* param) else { #if defined(TIC80_PRO) - const char* name = getProjectName(param); + const char* name = getName(param, PROJECT_LUA_EXT); + + if(!fsExistsFile(console->fs, name)) + name = getName(param, PROJECT_MOON_EXT); + + if(!fsExistsFile(console->fs, name)) + name = getName(param, PROJECT_JS_EXT); void* data = fsLoadFile(console->fs, name, &size); if(data) { - loadProject(console, data, size, &console->tic->cart); + loadProject(console, name, data, size, &console->tic->cart); onCartLoaded(console, name); SDL_free(data); @@ -1865,12 +1878,12 @@ static CartSaveResult saveCartName(Console* console, const char* name) s32 size = 0; #if defined(TIC80_PRO) - if(hasExt(name, PROJECT_EXT)) + if(hasProjectExt(name)) { - size = saveProject(console, buffer); + size = saveProject(console, buffer, projectComment(name)); } else -#endif +#endif { name = getCartName(name); size = tic->api.save(&tic->cart, buffer); @@ -2613,9 +2626,9 @@ static void cmdLoadCart(Console* console, const char* name) if(data) { #if defined(TIC80_PRO) - if(hasExt(name, PROJECT_EXT)) + if(hasProjectExt(name)) { - loadProject(console, data, size, &embed.file); + loadProject(console, name, data, size, &embed.file); } else #endif diff --git a/src/console.h b/src/console.h index 21768a2..4efe28c 100644 --- a/src/console.h +++ b/src/console.h @@ -91,7 +91,7 @@ struct Console bool startSurf; void(*load)(Console*, const char* name); - bool(*loadProject)(Console*, const char* data, s32 size, tic_cartridge* dst); + bool(*loadProject)(Console*, const char* name, const char* data, s32 size, tic_cartridge* dst); void(*updateProject)(Console*); void(*error)(Console*, const char*); void(*trace)(Console*, const char*, u8 color); diff --git a/src/studio.h b/src/studio.h index 3b991ad..16c3ada 100644 --- a/src/studio.h +++ b/src/studio.h @@ -61,7 +61,9 @@ #define KEYMAP_DAT_PATH TIC_LOCAL KEYMAP_DAT #define CART_EXT ".tic" -#define PROJECT_EXT ".ticp" +#define PROJECT_LUA_EXT ".lua" +#define PROJECT_MOON_EXT ".moon" +#define PROJECT_JS_EXT ".js" typedef struct { diff --git a/src/surf.c b/src/surf.c index 93c3ab0..6d8ff81 100644 --- a/src/surf.c +++ b/src/surf.c @@ -388,12 +388,13 @@ static bool addMenuItem(const char* name, const char* info, s32 id, void* ptr, b AddMenuItem* data = (AddMenuItem*)ptr; static const char CartExt[] = CART_EXT; - static const char ProjectExt[] = PROJECT_EXT; if(dir || hasExt(name, CartExt) #if defined(TIC80_PRO) - || hasExt(name, ProjectExt) + || hasExt(name, PROJECT_LUA_EXT) + || hasExt(name, PROJECT_MOON_EXT) + || hasExt(name, PROJECT_JS_EXT) #endif ) { @@ -416,7 +417,6 @@ static bool addMenuItem(const char* name, const char* info, s32 id, void* ptr, b cutExt(item->label, CartExt); else { - cutExt(item->label, ProjectExt); project = true; } @@ -535,8 +535,8 @@ static void loadCover(Surf* surf) if(cart) { - if(hasExt(item->name, PROJECT_EXT)) - surf->console->loadProject(surf->console, data, size, cart); + if(hasExt(item->name, PROJECT_LUA_EXT)) + surf->console->loadProject(surf->console, item->name, data, size, cart); else tic->api.load(cart, data, size, true); @@ -655,7 +655,7 @@ static void onPlayCart(Surf* surf) s32 size = 0; void* data = fsLoadFile(surf->fs, item->name, &size); - surf->console->loadProject(surf->console, data, size, cart); + surf->console->loadProject(surf->console, item->name, data, size, cart); SDL_memcpy(&surf->tic->cart, cart, sizeof(tic_cartridge));