diff options
-rw-r--r-- | src/scripting.c | 59 | ||||
-rw-r--r-- | src/sldj.c | 14 | ||||
-rw-r--r-- | test/scanTest1.c | 2 |
3 files changed, 48 insertions, 27 deletions
diff --git a/src/scripting.c b/src/scripting.c index af5d993..9781f5f 100644 --- a/src/scripting.c +++ b/src/scripting.c @@ -7,27 +7,12 @@ void handle_tcc_error(void* opaque, const char* msg) void initScripting(SldjScripting* scripting) { - scripting->state = tcc_new(); - scripting->lineScanner = NULL; - scripting->fileBuf = NULL; - - if (!scripting->state) - { - TraceLog(LOG_ERROR, "Could not open tcc state"); - return; - } - - tcc_set_error_func(scripting->state, stderr, handle_tcc_error); -} - -void closeScripting(SldjScripting* scripting) -{ - tcc_delete(scripting->state); - - if (scripting->fileBuf != NULL) - { - free(scripting->fileBuf); - } + *scripting = (SldjScripting){ + .state = NULL, + .lineScanner = NULL, + .fileBuf = NULL, + .fileSize = 0 + }; } void compileScript(SldjScripting* scripting, const char filePath[SLDJ_NAMEMAX]) @@ -69,10 +54,25 @@ void compileScript(SldjScripting* scripting, const char filePath[SLDJ_NAMEMAX]) scripting->fileBuf[scripting->fileSize - 1] = '\0'; fclose(file); - // Compile shit now. + // Setup compiler. + if (scripting->state != NULL) + { + tcc_delete(scripting->state); + } + + scripting->state = tcc_new(); + + if (scripting->state == NULL) + { + TraceLog(LOG_ERROR, "Could not open tcc state"); + return; + } + + tcc_set_error_func(scripting->state, stderr, handle_tcc_error); tcc_set_output_type(scripting->state, TCC_OUTPUT_MEMORY); - if (tcc_compile_string(scripting->state, scripting->fileBuf) == -1) + // Compile. + if (tcc_compile_string(scripting->state, scripting->fileBuf) < 0) { return; } @@ -85,3 +85,16 @@ void compileScript(SldjScripting* scripting, const char filePath[SLDJ_NAMEMAX]) scripting->lineScanner = tcc_get_symbol(scripting->state, "lineScanner"); } +void closeScripting(SldjScripting* scripting) +{ + if (scripting->state != NULL) + { + tcc_delete(scripting->state); + } + + if (scripting->fileBuf != NULL) + { + free(scripting->fileBuf); + } +} + @@ -15,7 +15,7 @@ void initSldj(Sldj* sldj) // Scripting. initScripting(&sldj->scripting); - compileScript(&sldj->scripting, "/home/nathan/Documents/dev/sldj/test/scanTest1.c"); + //compileScript(&sldj->scripting, "/home/nathan/Documents/dev/sldj/test/scanTest1.c"); if (sldj->scripting.lineScanner != NULL) { @@ -42,14 +42,15 @@ void updateSldj(Sldj* sldj) for (int x = 0; x < sldj->viewport.texture.width; ++x) { DrawPixel(x, y, sldj->scripting.lineScanner(xScan, yScan, sldj->frameCounter)); - ++xScan; + xScan += sldj->xCount; } - ++yScan; + yScan += sldj->yCount; } } EndTextureMode(); + ClearBackground(DARKGRAY); // Draw scanned image. Texture viewport = sldj->viewport.texture; @@ -63,6 +64,13 @@ void updateSldj(Sldj* sldj) WHITE ); + DrawFPS(0, 0); + + if (IsKeyPressed(KEY_R)) + { + compileScript(&sldj->scripting, "/home/nathan/Documents/dev/sldj/test/scanTest1.c"); + } + EndDrawing(); ++sldj->frameCounter; diff --git a/test/scanTest1.c b/test/scanTest1.c index e14a620..06057f2 100644 --- a/test/scanTest1.c +++ b/test/scanTest1.c @@ -10,6 +10,6 @@ typedef struct Color { Color lineScanner(uint16_t x, uint16_t y, uint32_t frameNumber) { - return (Color){.r = 0, .g = 0, .b = 255, .a = 255}; + return (Color){.r = random() % 255, .g = random() % 255, .b = random() % 255, .a = 255}; } |