From f712ca73d42ca35f5bf5530ce25047854c6c7ff4 Mon Sep 17 00:00:00 2001 From: NishiOwO Date: Tue, 30 Sep 2025 03:08:26 +0000 Subject: [PATCH] add dispatcherror git-svn-id: http://svn2.nishi.boats/svn/milsko/trunk@71 b9cfdab3-6d41-4d17-bbe4-086880011989 --- include/Mw/Core.h | 3 +++ include/Mw/TypeDefs.h | 1 + src/core.c | 23 +++++++++++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/include/Mw/Core.h b/include/Mw/Core.h index 281af46..00d0007 100644 --- a/include/Mw/Core.h +++ b/include/Mw/Core.h @@ -34,6 +34,9 @@ MWDECL void MwVaListApply(MwWidget handle, va_list va); MWDECL void MwAddUserHandler(MwWidget handle, const char* key, MwUserHandler handler, void* user_data); MWDECL void MwDispatchUserHandler(MwWidget handle, const char* key, void* handler_data); +MWDECL void MwSetErrorHandler(MwErrorHandler handler, void* user_data); +MWDECL void MwDispatchError(int code, const char* message); + #ifdef __cplusplus } #endif diff --git a/include/Mw/TypeDefs.h b/include/Mw/TypeDefs.h index e56e570..93829c8 100644 --- a/include/Mw/TypeDefs.h +++ b/include/Mw/TypeDefs.h @@ -18,6 +18,7 @@ typedef void* MwWidget; #endif typedef void (*MwHandler)(MwWidget handle); typedef void (*MwUserHandler)(MwWidget handle, void* user_data, void* call_data); +typedef void (*MwErrorHandler)(int code, const char* message, void* user_data); #ifdef _MILSKO #include diff --git a/src/core.c b/src/core.c index 7f79905..a6a1281 100644 --- a/src/core.c +++ b/src/core.c @@ -250,3 +250,26 @@ void MwAddUserHandler(MwWidget handle, const char* key, MwUserHandler handler, v ind = shgeti(handle->handler, key); handle->handler[ind].user_data = user_data; } + +static MwErrorHandler error_handler = NULL; +static void* error_user_data = NULL; + +void MwSetErrorHandler(MwErrorHandler handler, void* user_data) { + error_handler = handler; + error_user_data = user_data; +} + +void MwDispatchError(int code, const char* message) { + if(error_handler != NULL) { + error_handler(code, message, error_user_data); + } else { +#ifdef _WIN32 + char buffer[1024]; + sprintf(buffer, "Error: %s\r\nCode : %d\r\n\r\nMilsko is exiting.", message, code); + MessageBox(NULL, buffer, "Error", MB_ICONERROR | MB_OK); +#else + fprintf(stderr, "Error: %s\nCode : %d\n\nMilsko is exiting.", message, code); +#endif + exit(1); + } +}