From d21cd7f78b667836ca0eb1e0501df708b6ff9906 Mon Sep 17 00:00:00 2001 From: Dominic Masters Date: Wed, 11 Mar 2026 10:33:43 -0500 Subject: [PATCH] Update error and debug logging methods --- assets/scene/minesweeper.lua | 1 - src/dusk/CMakeLists.txt | 2 +- src/dusk/assert/assert.c | 6 +- src/dusk/asset/asset.c | 1 - src/dusk/display/display.c | 1 - src/dusk/display/mesh/mesh.c | 1 - src/dusk/display/mesh/quad.c | 1 - src/dusk/error/error.c | 5 +- src/dusk/input/input.c | 1 - src/dusk/{debug => log}/CMakeLists.txt | 0 src/dusk/{debug/debug.h => log/log.h} | 10 ++- src/dusk/scene/scene.c | 5 +- .../script/module/display/moduletileset.c | 1 - src/dusk/script/module/system/modulesystem.c | 5 +- src/dusk/script/scriptcontext.c | 1 - src/dusk/script/scriptmanager.c | 1 - src/dusk/ui/ui.c | 1 - src/duskdolphin/CMakeLists.txt | 2 +- src/duskdolphin/debug/debug.c | 81 ------------------- src/duskdolphin/display/mesh/meshdolphin.c | 1 - src/duskdolphin/input/inputdolphin.c | 1 - src/duskdolphin/{debug => log}/CMakeLists.txt | 2 +- src/duskdolphin/log/log.c | 65 +++++++++++++++ src/dusklinux/CMakeLists.txt | 2 +- src/dusklinux/{debug => log}/CMakeLists.txt | 2 +- src/dusklinux/{debug/debug.c => log/log.c} | 11 ++- src/duskpsp/CMakeLists.txt | 4 +- src/duskpsp/debug/debug.c | 23 ------ src/duskpsp/{debug => log}/CMakeLists.txt | 2 +- src/duskpsp/log/log.c | 52 ++++++++++++ 30 files changed, 147 insertions(+), 144 deletions(-) rename src/dusk/{debug => log}/CMakeLists.txt (100%) rename src/dusk/{debug/debug.h => log/log.h} (54%) delete mode 100644 src/duskdolphin/debug/debug.c rename src/duskdolphin/{debug => log}/CMakeLists.txt (94%) create mode 100644 src/duskdolphin/log/log.c rename src/dusklinux/{debug => log}/CMakeLists.txt (94%) rename src/dusklinux/{debug/debug.c => log/log.c} (54%) delete mode 100644 src/duskpsp/debug/debug.c rename src/duskpsp/{debug => log}/CMakeLists.txt (94%) create mode 100644 src/duskpsp/log/log.c diff --git a/assets/scene/minesweeper.lua b/assets/scene/minesweeper.lua index 31dc201..bcafd1e 100644 --- a/assets/scene/minesweeper.lua +++ b/assets/scene/minesweeper.lua @@ -187,7 +187,6 @@ function sceneUpdate() end if inputIsDown(INPUT_ACTION_DOWN) then - print("down") y = y + 1 end diff --git a/src/dusk/CMakeLists.txt b/src/dusk/CMakeLists.txt index 504800c..047d6c7 100644 --- a/src/dusk/CMakeLists.txt +++ b/src/dusk/CMakeLists.txt @@ -46,7 +46,7 @@ dusk_env_to_h(duskdefs.env duskdefs.h) # Subdirs add_subdirectory(assert) add_subdirectory(asset) -add_subdirectory(debug) +add_subdirectory(log) add_subdirectory(display) add_subdirectory(engine) add_subdirectory(error) diff --git a/src/dusk/assert/assert.c b/src/dusk/assert/assert.c index b3c334c..b7a3ed8 100644 --- a/src/dusk/assert/assert.c +++ b/src/dusk/assert/assert.c @@ -6,7 +6,7 @@ */ #include "assert.h" -#include "debug/debug.h" +#include "log/log.h" #ifndef DUSK_ASSERTIONS_FAKED #ifdef DUSK_TEST_ASSERT @@ -31,14 +31,12 @@ const char *message ) { if(x != true) { - debugPrint( + logError( "Assertion Failed in %s:%i\n\n%s\n", file, line, message ); - debugFlush(); - abort(); } } diff --git a/src/dusk/asset/asset.c b/src/dusk/asset/asset.c index 88894bd..259b206 100644 --- a/src/dusk/asset/asset.c +++ b/src/dusk/asset/asset.c @@ -11,7 +11,6 @@ #include "assert/assert.h" #include "asset/assettype.h" #include "engine/engine.h" -#include "debug/debug.h" #include "util/string.h" asset_t ASSET; diff --git a/src/dusk/display/display.c b/src/dusk/display/display.c index 717cc01..8419140 100644 --- a/src/dusk/display/display.c +++ b/src/dusk/display/display.c @@ -12,7 +12,6 @@ #include "display/mesh/quad.h" #include "display/screen/screen.h" #include "ui/ui.h" -#include "debug/debug.h" #include "display/text/text.h" #include "assert/assert.h" #include "util/memory.h" diff --git a/src/dusk/display/mesh/mesh.c b/src/dusk/display/mesh/mesh.c index fc61476..5dd79d8 100644 --- a/src/dusk/display/mesh/mesh.c +++ b/src/dusk/display/mesh/mesh.c @@ -8,7 +8,6 @@ #include "mesh.h" #include "util/memory.h" #include "assert/assert.h" -#include "debug/debug.h" errorret_t meshInit( mesh_t *mesh, diff --git a/src/dusk/display/mesh/quad.c b/src/dusk/display/mesh/quad.c index f18a1ce..dc87cef 100644 --- a/src/dusk/display/mesh/quad.c +++ b/src/dusk/display/mesh/quad.c @@ -7,7 +7,6 @@ #include "quad.h" #include "assert/assert.h" -#include "debug/debug.h" mesh_t QUAD_MESH_SIMPLE; meshvertex_t QUAD_MESH_SIMPLE_VERTICES[QUAD_VERTEX_COUNT] = { diff --git a/src/dusk/error/error.c b/src/dusk/error/error.c index 909378d..f1c6c90 100644 --- a/src/dusk/error/error.c +++ b/src/dusk/error/error.c @@ -9,7 +9,7 @@ #include "error.h" #include "util/memory.h" #include "util/string.h" -#include "debug/debug.h" +#include "log/log.h" errorstate_t ERROR_STATE = { 0 }; @@ -125,12 +125,11 @@ errorret_t errorPrint(const errorret_t retval) { assertNotNull(retval.state, "Error state cannot be NULL"); assertNotNull(retval.state->message, "Message cannot be NULL"); - debugPrint( + logError( ERROR_PRINT_FORMAT, retval.state->code, retval.state->message, retval.state->lines ); - debugFlush(); return retval; } \ No newline at end of file diff --git a/src/dusk/input/input.c b/src/dusk/input/input.c index fa5a61b..b128608 100644 --- a/src/dusk/input/input.c +++ b/src/dusk/input/input.c @@ -11,7 +11,6 @@ #include "util/string.h" #include "util/math.h" #include "time/time.h" -#include "debug/debug.h" input_t INPUT; diff --git a/src/dusk/debug/CMakeLists.txt b/src/dusk/log/CMakeLists.txt similarity index 100% rename from src/dusk/debug/CMakeLists.txt rename to src/dusk/log/CMakeLists.txt diff --git a/src/dusk/debug/debug.h b/src/dusk/log/log.h similarity index 54% rename from src/dusk/debug/debug.h rename to src/dusk/log/log.h index e6c036b..6bbde41 100644 --- a/src/dusk/debug/debug.h +++ b/src/dusk/log/log.h @@ -14,9 +14,13 @@ * @param message The message format string. * @param ... Additional arguments for the format string. */ -void debugPrint(const char_t *message, ...); +void logDebug(const char_t *message, ...); /** - * Flushes the debug output buffer. + * Prints a message to the error console. For some platforms this will pause + * the program. + * + * @param message The message format string. + * @param ... Additional arguments for the format string. */ -void debugFlush(); \ No newline at end of file +void logError(const char_t *message, ...); \ No newline at end of file diff --git a/src/dusk/scene/scene.c b/src/dusk/scene/scene.c index 0d026a8..4daf041 100644 --- a/src/dusk/scene/scene.c +++ b/src/dusk/scene/scene.c @@ -6,7 +6,7 @@ #include "scene.h" #include "assert/assert.h" #include "util/memory.h" -#include "debug/debug.h" +#include "log/log.h" #include "time/time.h" #include "display/camera/camera.h" #include "display/screen/screen.h" @@ -84,8 +84,7 @@ void sceneDispose(void) { if(lua_pcall(SCENE.scriptContext.luaState, 0, 0, 0) != LUA_OK) { const char_t *strErr = lua_tostring(SCENE.scriptContext.luaState, -1); lua_pop(SCENE.scriptContext.luaState, 1); - debugPrint("Failed to call function '%s': %s\n", "sceneDispose", strErr); - debugFlush(); + logDebug("Failed to call function '%s': %s\n", "sceneDispose", strErr); } } else { lua_pop(SCENE.scriptContext.luaState, 1); diff --git a/src/dusk/script/module/display/moduletileset.c b/src/dusk/script/module/display/moduletileset.c index 368411e..46c6b27 100644 --- a/src/dusk/script/module/display/moduletileset.c +++ b/src/dusk/script/module/display/moduletileset.c @@ -10,7 +10,6 @@ #include "display/texture/tileset.h" #include "util/memory.h" #include "util/string.h" -#include "debug/debug.h" void moduleTileset(scriptcontext_t *ctx) { assertNotNull(ctx, "Script context cannot be NULL"); diff --git a/src/dusk/script/module/system/modulesystem.c b/src/dusk/script/module/system/modulesystem.c index 0206af8..1ce2ee7 100644 --- a/src/dusk/script/module/system/modulesystem.c +++ b/src/dusk/script/module/system/modulesystem.c @@ -6,7 +6,7 @@ */ #include "modulesystem.h" -#include "debug/debug.h" +#include "log/log.h" #include "assert/assert.h" #include "util/string.h" #include "script/scriptmodule.h" @@ -36,8 +36,7 @@ int moduleSysPrint(lua_State *L) { luaL_pushresult(&b); const char *msg = lua_tostring(L, -1); - debugPrint("%s\n", msg); - debugFlush(); + logDebug("%s\n", msg); return 0; // no values returned to Lua } diff --git a/src/dusk/script/scriptcontext.c b/src/dusk/script/scriptcontext.c index 872bac1..978aedd 100644 --- a/src/dusk/script/scriptcontext.c +++ b/src/dusk/script/scriptcontext.c @@ -9,7 +9,6 @@ #include "assert/assert.h" #include "asset/asset.h" #include "util/memory.h" -#include "debug/debug.h" #include "script/scriptmodule.h" #include "event/event.h" diff --git a/src/dusk/script/scriptmanager.c b/src/dusk/script/scriptmanager.c index d773329..684e8e8 100644 --- a/src/dusk/script/scriptmanager.c +++ b/src/dusk/script/scriptmanager.c @@ -8,7 +8,6 @@ #include "scriptmanager.h" #include "util/memory.h" #include "assert/assert.h" -#include "debug/debug.h" #include "asset/asset.h" scriptmanager_t SCRIPT_MANAGER; diff --git a/src/dusk/ui/ui.c b/src/dusk/ui/ui.c index 1872049..cfa73bf 100644 --- a/src/dusk/ui/ui.c +++ b/src/dusk/ui/ui.c @@ -10,7 +10,6 @@ #include "assert/assert.h" #include "display/spritebatch/spritebatch.h" #include "display/screen/screen.h" -#include "debug/debug.h" ui_t UI; diff --git a/src/duskdolphin/CMakeLists.txt b/src/duskdolphin/CMakeLists.txt index 06427fb..8eeda26 100644 --- a/src/duskdolphin/CMakeLists.txt +++ b/src/duskdolphin/CMakeLists.txt @@ -16,6 +16,6 @@ target_sources(${DUSK_BINARY_TARGET_NAME} # Subdirs add_subdirectory(asset) -add_subdirectory(debug) +add_subdirectory(log) add_subdirectory(display) add_subdirectory(input) \ No newline at end of file diff --git a/src/duskdolphin/debug/debug.c b/src/duskdolphin/debug/debug.c deleted file mode 100644 index d1a11f0..0000000 --- a/src/duskdolphin/debug/debug.c +++ /dev/null @@ -1,81 +0,0 @@ -/** - * Copyright (c) 2026 Dominic Masters - * - * This software is released under the MIT License. - * https://opensource.org/licenses/MIT - */ - -#include "debug/debug.h" -#include "display/display.h" -#include - -static char_t DEBUG_ERROR_BUFFER[16*1024] = {0}; - -void debugPrint(const char_t *message, ...) { - size_t start = strlen(DEBUG_ERROR_BUFFER); - - va_list args; - va_start(args, message); - - // Print to stdout - va_list copy; - va_copy(copy, args); - vfprintf(stdout, message, copy); - va_end(copy); - fflush(stdout); - - // Append to buffer - // vsnprintf( - // DEBUG_ERROR_BUFFER + start, - // sizeof(DEBUG_ERROR_BUFFER) - start, - // message, - // args - // ); -} - -void debugFlush() { - fflush(stdout); - - // Either create graphics, or hijack the displays' graphics. - // void *xfb = NULL; - // GXRModeObj *rmode = NULL; - // void *framebuffer; - - // if(DISPLAY.frameBuffer[0]) { - // console_init( - // DISPLAY.frameBuffer[0], - // 20, - // 20, - // DISPLAY.screenMode->fbWidth, - // DISPLAY.screenMode->xfbHeight, - // DISPLAY.screenMode->fbWidth * VI_DISPLAY_PIX_SZ - // ); - // } else { - // VIDEO_Init(); - // rmode = VIDEO_GetPreferredMode(NULL); - // framebuffer = MEM_K0_TO_K1(SYS_AllocateFramebuffer(rmode)); - // console_init( - // framebuffer, - // 20, - // 20, - // rmode->fbWidth, - // rmode->xfbHeight, - // rmode->fbWidth*VI_DISPLAY_PIX_SZ - // ); - // VIDEO_Configure(rmode); - // VIDEO_SetNextFramebuffer(framebuffer); - // VIDEO_SetBlack(FALSE); - // VIDEO_Flush(); - // VIDEO_WaitVSync(); - // if(rmode->viTVMode&VI_NON_INTERLACE) VIDEO_WaitVSync(); - // } - - // // Printf - // printf("SOB\n"); - // printf(DEBUG_ERROR_BUFFER); - // printf("\nEOB."); - - while(SYS_MainLoop()) { - VIDEO_WaitVSync(); - } -} \ No newline at end of file diff --git a/src/duskdolphin/display/mesh/meshdolphin.c b/src/duskdolphin/display/mesh/meshdolphin.c index cb14f27..39be77f 100644 --- a/src/duskdolphin/display/mesh/meshdolphin.c +++ b/src/duskdolphin/display/mesh/meshdolphin.c @@ -8,7 +8,6 @@ #include "display/mesh/mesh.h" #include "display/texture/texture.h" #include "assert/assert.h" -#include "debug/debug.h" errorret_t meshInitDolphin( meshdolphin_t *mesh, diff --git a/src/duskdolphin/input/inputdolphin.c b/src/duskdolphin/input/inputdolphin.c index 2a1f9ef..e8270a5 100644 --- a/src/duskdolphin/input/inputdolphin.c +++ b/src/duskdolphin/input/inputdolphin.c @@ -7,7 +7,6 @@ #include "input/input.h" #include "assert/assert.h" -#include "debug/debug.h" inputbuttondata_t INPUT_BUTTON_DATA[] = { #ifdef DUSK_INPUT_GAMEPAD diff --git a/src/duskdolphin/debug/CMakeLists.txt b/src/duskdolphin/log/CMakeLists.txt similarity index 94% rename from src/duskdolphin/debug/CMakeLists.txt rename to src/duskdolphin/log/CMakeLists.txt index 192f9b7..e6535a7 100644 --- a/src/duskdolphin/debug/CMakeLists.txt +++ b/src/duskdolphin/log/CMakeLists.txt @@ -7,5 +7,5 @@ target_sources(${DUSK_LIBRARY_TARGET_NAME} PUBLIC - debug.c + log.c ) \ No newline at end of file diff --git a/src/duskdolphin/log/log.c b/src/duskdolphin/log/log.c new file mode 100644 index 0000000..3798c8a --- /dev/null +++ b/src/duskdolphin/log/log.c @@ -0,0 +1,65 @@ +/** + * Copyright (c) 2026 Dominic Masters + * + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT + */ + +#include "log/log.h" +#include "display/display.h" +#include + +void logDebug(const char_t *message, ...) { + // Print to stdout + va_list args; + va_start(args, message); + vfprintf(stdout, message, args); + va_end(args); + fflush(stdout); +} + +void logError(const char_t *message, ...) { + // Either create graphics, or hijack the displays' graphics. + void *xfb = NULL; + GXRModeObj *rmode = NULL; + void *framebuffer; + + if(DISPLAY.frameBuffer[0]) { + console_init( + DISPLAY.frameBuffer[0], + 20, + 20, + DISPLAY.screenMode->fbWidth, + DISPLAY.screenMode->xfbHeight, + DISPLAY.screenMode->fbWidth * VI_DISPLAY_PIX_SZ + ); + } else { + VIDEO_Init(); + rmode = VIDEO_GetPreferredMode(NULL); + framebuffer = MEM_K0_TO_K1(SYS_AllocateFramebuffer(rmode)); + console_init( + framebuffer, + 20, + 20, + rmode->fbWidth, + rmode->xfbHeight, + rmode->fbWidth*VI_DISPLAY_PIX_SZ + ); + VIDEO_Configure(rmode); + VIDEO_SetNextFramebuffer(framebuffer); + VIDEO_SetBlack(FALSE); + VIDEO_Flush(); + VIDEO_WaitVSync(); + if(rmode->viTVMode&VI_NON_INTERLACE) VIDEO_WaitVSync(); + } + + // Printf + va_list args; + va_start(args, message); + vprintf(message, args); + va_end(args); + + while(SYS_MainLoop()) { + VIDEO_WaitVSync(); + } +} \ No newline at end of file diff --git a/src/dusklinux/CMakeLists.txt b/src/dusklinux/CMakeLists.txt index 657382a..4d728f2 100644 --- a/src/dusklinux/CMakeLists.txt +++ b/src/dusklinux/CMakeLists.txt @@ -11,5 +11,5 @@ target_include_directories(${DUSK_LIBRARY_TARGET_NAME} # Subdirs add_subdirectory(asset) -add_subdirectory(debug) +add_subdirectory(log) add_subdirectory(input) \ No newline at end of file diff --git a/src/dusklinux/debug/CMakeLists.txt b/src/dusklinux/log/CMakeLists.txt similarity index 94% rename from src/dusklinux/debug/CMakeLists.txt rename to src/dusklinux/log/CMakeLists.txt index a01ae13..0d4088f 100644 --- a/src/dusklinux/debug/CMakeLists.txt +++ b/src/dusklinux/log/CMakeLists.txt @@ -6,5 +6,5 @@ # Sources target_sources(${DUSK_LIBRARY_TARGET_NAME} PUBLIC - debug.c + log.c ) \ No newline at end of file diff --git a/src/dusklinux/debug/debug.c b/src/dusklinux/log/log.c similarity index 54% rename from src/dusklinux/debug/debug.c rename to src/dusklinux/log/log.c index e92aa45..d48e238 100644 --- a/src/dusklinux/debug/debug.c +++ b/src/dusklinux/log/log.c @@ -5,15 +5,18 @@ * https://opensource.org/licenses/MIT */ -#include "debug/debug.h" +#include "log/log.h" -void debugPrint(const char_t *message, ...) { +void logDebug(const char_t *message, ...) { va_list args; va_start(args, message); vprintf(message, args); va_end(args); } -void debugFlush() { - fflush(stdout); +void logError(const char_t *message, ...) { + va_list args; + va_start(args, message); + vprintf(message, args); + va_end(args); } \ No newline at end of file diff --git a/src/duskpsp/CMakeLists.txt b/src/duskpsp/CMakeLists.txt index 45c83bd..793ece4 100644 --- a/src/duskpsp/CMakeLists.txt +++ b/src/duskpsp/CMakeLists.txt @@ -15,6 +15,6 @@ target_sources(${DUSK_BINARY_TARGET_NAME} ) # Subdirs -add_subdirectory(debug) add_subdirectory(asset) -add_subdirectory(input) \ No newline at end of file +add_subdirectory(input) +add_subdirectory(log) \ No newline at end of file diff --git a/src/duskpsp/debug/debug.c b/src/duskpsp/debug/debug.c deleted file mode 100644 index fbb6732..0000000 --- a/src/duskpsp/debug/debug.c +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Copyright (c) 2026 Dominic Masters - * - * This software is released under the MIT License. - * https://opensource.org/licenses/MIT - */ - -#include "debug/debug.h" - -void debugPrint(const char_t *message, ...) { - FILE *file = fopen("ms0:/PSP/GAME/Dusk/debug.log", "a"); - if(!file) return; - - va_list args; - va_start(args, message); - vfprintf(file, message, args); - va_end(args); - fclose(file); -} - -void debugFlush() { - fflush(stdout); -} \ No newline at end of file diff --git a/src/duskpsp/debug/CMakeLists.txt b/src/duskpsp/log/CMakeLists.txt similarity index 94% rename from src/duskpsp/debug/CMakeLists.txt rename to src/duskpsp/log/CMakeLists.txt index 192f9b7..e6535a7 100644 --- a/src/duskpsp/debug/CMakeLists.txt +++ b/src/duskpsp/log/CMakeLists.txt @@ -7,5 +7,5 @@ target_sources(${DUSK_LIBRARY_TARGET_NAME} PUBLIC - debug.c + log.c ) \ No newline at end of file diff --git a/src/duskpsp/log/log.c b/src/duskpsp/log/log.c new file mode 100644 index 0000000..ba8eed9 --- /dev/null +++ b/src/duskpsp/log/log.c @@ -0,0 +1,52 @@ +/** + * Copyright (c) 2026 Dominic Masters + * + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT + */ + +#include "log/log.h" + +void logDebug(const char_t *message, ...) { + va_list args; + va_start(args, message); + + // print to stdout + va_list copy; + va_copy(copy, args); + vprintf(message, copy); + va_end(copy); + + // print to file + FILE *file = fopen("ms0:/PSP/GAME/Dusk/debug.log", "a"); + if (file) { + va_copy(copy, args); + vfprintf(file, message, copy); + va_end(copy); + fclose(file); + } + + va_end(args); +} + +void logError(const char_t *message, ...) { + va_list args; + va_start(args, message); + + // print to stderr + va_list copy; + va_copy(copy, args); + vfprintf(stderr, message, copy); + va_end(copy); + + // print to file + FILE *file = fopen("ms0:/PSP/GAME/Dusk/error.log", "a"); + if (file) { + va_copy(copy, args); + vfprintf(file, message, copy); + va_end(copy); + fclose(file); + } + + va_end(args); +} \ No newline at end of file