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);
}
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)
{
Console* console = (Console*)data;
@ -1245,6 +1238,8 @@ static void writeMemoryString(MemoryBuffer* memory, const char* str)
static void onConsoleExportHtmlCommand(Console* console, const char* name)
{
tic_mem* tic = console->tic;
char cartName[FILENAME_MAX];
strcpy(cartName, name);
@ -1286,43 +1281,62 @@ static void onConsoleExportHtmlCommand(Console* console, const char* name)
{
writeMemoryString(&output, "var cartridge = [");
s32 size = saveRom(console->tic, buffer);
s32 size = 0;
// zip buffer
// create cart copy
{
unsigned long outSize = sizeof(tic_cartridge);
u8* output = (u8*)SDL_malloc(outSize);
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
{
unsigned long outSize = sizeof(tic_cartridge);
u8* output = (u8*)SDL_malloc(outSize);
compress2(output, &outSize, buffer, size, Z_BEST_COMPRESSION);
SDL_free(buffer);
buffer = output;
size = outSize;
}
{
u8* ptr = buffer;
u8* end = ptr + size;
char value[] = "999,";
while(ptr != end)
{
sprintf(value, "%i,", *ptr++);
writeMemoryString(&output, value);
}
}
compress2(output, &outSize, buffer, size, Z_BEST_COMPRESSION);
SDL_free(buffer);
buffer = output;
size = outSize;
writeMemoryString(&output, "];\n");
writeMemoryData(&output, EmbedTicJs, EmbedTicJsSize);
writeMemoryString(&output, "</script>\n");
ptr += sizeof(Placeholder)-1;
writeMemoryData(&output, ptr, EmbedIndexSize - (ptr - EmbedIndex));
fsGetFileData(onFileDownloaded, cartName, output.data, output.size, DEFAULT_CHMOD, console);
}
{
u8* ptr = buffer;
u8* end = ptr + size;
char value[] = "999,";
while(ptr != end)
{
sprintf(value, "%i,", *ptr++);
writeMemoryString(&output, value);
}
}
SDL_free(buffer);
writeMemoryString(&output, "];\n");
writeMemoryData(&output, EmbedTicJs, EmbedTicJsSize);
writeMemoryString(&output, "</script>\n");
ptr += sizeof(Placeholder)-1;
writeMemoryData(&output, ptr, EmbedIndexSize - (ptr - EmbedIndex));
fsGetFileData(onFileDownloaded, cartName, output.data, output.size, DEFAULT_CHMOD, console);
}
}
}
@ -1526,6 +1540,8 @@ static void onConsoleExportCommand(Console* console, const char* param)
static CartSaveResult saveCartName(Console* console, const char* name)
{
tic_mem* tic = console->tic;
bool success = false;
if(name && strlen(name))
@ -1543,7 +1559,7 @@ static CartSaveResult saveCartName(Console* console, const char* name)
}
else
{
s32 size = saveRom(console->tic, buffer);
s32 size = tic->api.save(&tic->cart, buffer);
name = getRomName(name);

View File

@ -89,7 +89,7 @@ static const char* getPMemName(Run* run)
static void tick(Run* run)
{
tic_mem* tic = run->tic;
// tic_mem* tic = run->tic;
while(pollEvent());
@ -98,53 +98,9 @@ static void tick(Run* run)
if(!run->init)
{
// process 'dofile'
{
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;
}
else SDL_memcpy(tic->code.data, buffer, size);
}
}
else
{
char buffer[256];
sprintf(buffer, "dofile: file '%s' not found", filename);
onError(run, buffer);
return;
}
}
}
}
if(processDoFile())
return;
run->tickData.start = run->tickData.counter(),
run->init = true;
}

View File

@ -1357,6 +1357,60 @@ static void onFullscreen()
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()
{
studio.tic->api.reset(studio.tic);

View File

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

View File

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