no message

This commit is contained in:
BADIM-PC\Vadim 2017-11-08 14:07:23 +03:00
parent 0e146aee0c
commit a726b30d84
5 changed files with 116 additions and 87 deletions

View File

@ -905,13 +905,6 @@ static void onConsoleConfigCommand(Console* console, const char* param)
commandDone(console); commandDone(console);
} }
static s32 saveRom(tic_mem* tic, void* buffer)
{
s32 size = tic->api.save(&tic->cart, buffer);
return size;
}
static void onFileDownloaded(GetResult result, void* data) static void onFileDownloaded(GetResult result, void* data)
{ {
Console* console = (Console*)data; Console* console = (Console*)data;
@ -1245,6 +1238,8 @@ static void writeMemoryString(MemoryBuffer* memory, const char* str)
static void onConsoleExportHtmlCommand(Console* console, const char* name) static void onConsoleExportHtmlCommand(Console* console, const char* name)
{ {
tic_mem* tic = console->tic;
char cartName[FILENAME_MAX]; char cartName[FILENAME_MAX];
strcpy(cartName, name); strcpy(cartName, name);
@ -1286,8 +1281,26 @@ static void onConsoleExportHtmlCommand(Console* console, const char* name)
{ {
writeMemoryString(&output, "var cartridge = ["); writeMemoryString(&output, "var cartridge = [");
s32 size = saveRom(console->tic, buffer); s32 size = 0;
// create cart copy
{
tic_cartridge* dup = SDL_malloc(sizeof(tic_cartridge));
SDL_memcpy(dup, &tic->cart, sizeof(tic_cartridge));
if(processDoFile())
{
SDL_memcpy(dup->code.data, tic->code.data, sizeof(tic_code));
size = tic->api.save(dup, buffer);
}
SDL_free(dup);
}
if(size)
{
// zip buffer // zip buffer
{ {
unsigned long outSize = sizeof(tic_cartridge); unsigned long outSize = sizeof(tic_cartridge);
@ -1326,6 +1339,7 @@ static void onConsoleExportHtmlCommand(Console* console, const char* name)
} }
} }
} }
}
SDL_free(EmbedIndex); SDL_free(EmbedIndex);
SDL_free(EmbedTicJs); SDL_free(EmbedTicJs);
@ -1526,6 +1540,8 @@ static void onConsoleExportCommand(Console* console, const char* param)
static CartSaveResult saveCartName(Console* console, const char* name) static CartSaveResult saveCartName(Console* console, const char* name)
{ {
tic_mem* tic = console->tic;
bool success = false; bool success = false;
if(name && strlen(name)) if(name && strlen(name))
@ -1543,7 +1559,7 @@ static CartSaveResult saveCartName(Console* console, const char* name)
} }
else else
{ {
s32 size = saveRom(console->tic, buffer); s32 size = tic->api.save(&tic->cart, buffer);
name = getRomName(name); name = getRomName(name);

View File

@ -89,7 +89,7 @@ static const char* getPMemName(Run* run)
static void tick(Run* run) static void tick(Run* run)
{ {
tic_mem* tic = run->tic; // tic_mem* tic = run->tic;
while(pollEvent()); while(pollEvent());
@ -98,52 +98,8 @@ static void tick(Run* run)
if(!run->init) if(!run->init)
{ {
// process 'dofile' if(processDoFile())
{
memset(tic->code.data, 0, sizeof(tic_code));
static const char DoFileTag[] = "dofile(";
enum {Size = sizeof DoFileTag - 1};
if (memcmp(tic->cart.code.data, DoFileTag, Size) == 0)
{
const char* start = tic->cart.code.data + Size;
const char* end = strchr(start, ')');
if(end && *start == *(end-1) && (*start == '"' || *start == '\''))
{
char filename[FILENAME_MAX] = {0};
memcpy(filename, start + 1, end - start - 2);
s32 size = 0;
void* buffer = fsReadFile(filename, &size);
if(buffer)
{
if(size > 0)
{
if(size > TIC_CODE_SIZE)
{
char buffer[256];
sprintf(buffer, "code is larger than %i symbols", TIC_CODE_SIZE);
onError(run, buffer);
return; return;
}
else SDL_memcpy(tic->code.data, buffer, size);
}
}
else
{
char buffer[256];
sprintf(buffer, "dofile: file '%s' not found", filename);
onError(run, buffer);
return;
}
}
}
}
run->tickData.start = run->tickData.counter(), run->tickData.start = run->tickData.counter(),
run->init = true; run->init = true;

View File

@ -1357,6 +1357,60 @@ static void onFullscreen()
SDL_SetWindowFullscreen(studio.window, studio.fullscreen ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0); SDL_SetWindowFullscreen(studio.window, studio.fullscreen ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0);
} }
bool processDoFile()
{
tic_mem* tic = studio.tic;
memset(tic->code.data, 0, sizeof(tic_code));
static const char DoFileTag[] = "dofile(";
enum {Size = sizeof DoFileTag - 1};
if (memcmp(tic->cart.code.data, DoFileTag, Size) == 0)
{
const char* start = tic->cart.code.data + Size;
const char* end = strchr(start, ')');
if(end && *start == *(end-1) && (*start == '"' || *start == '\''))
{
char filename[FILENAME_MAX] = {0};
memcpy(filename, start + 1, end - start - 2);
s32 size = 0;
void* buffer = fsReadFile(filename, &size);
if(buffer)
{
if(size > 0)
{
if(size > TIC_CODE_SIZE)
{
char buffer[256];
sprintf(buffer, "code is larger than %i symbols", TIC_CODE_SIZE);
setStudioMode(TIC_CONSOLE_MODE);
studio.console.error(&studio.console, buffer);
return false;
}
else SDL_memcpy(tic->code.data, buffer, size);
}
}
else
{
char buffer[256];
sprintf(buffer, "dofile: file '%s' not found", filename);
setStudioMode(TIC_CONSOLE_MODE);
studio.console.error(&studio.console, buffer);
return false;
}
}
}
else SDL_memcpy(tic->code.data, tic->cart.code.data, sizeof(tic_code));
return true;
}
void runProject() void runProject()
{ {
studio.tic->api.reset(studio.tic); studio.tic->api.reset(studio.tic);

View File

@ -193,3 +193,4 @@ void gotoCode();
void gotoSurf(); void gotoSurf();
void exitFromGameMenu(); void exitFromGameMenu();
void runProject(); void runProject();
bool processDoFile();

View File

@ -431,6 +431,8 @@ static void api_reset(tic_mem* memory)
machine->state.scanline = NULL; machine->state.scanline = NULL;
updateSaveid(memory); updateSaveid(memory);
memset(memory->code.data, 0, sizeof(tic_code));
} }
static void api_pause(tic_mem* memory) static void api_pause(tic_mem* memory)