forked from LeenkxTeam/LNXSDK
Update Files
This commit is contained in:
200
Kha/Kinc/Sources/kinc/error.h
Normal file
200
Kha/Kinc/Sources/kinc/error.h
Normal file
@ -0,0 +1,200 @@
|
||||
#pragma once
|
||||
|
||||
#include <kinc/global.h>
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
/*! \file error.h
|
||||
\brief Contains functionality to stop the program in case of an error and create a user-visible error message.
|
||||
|
||||
The affirm and error functions print an error message and then exit the program. Error messages can be made
|
||||
visible to the user (unless a console window is active this is only implemented for Windows).
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Exits the program when a condition is untrue and shows
|
||||
/// a generic error message.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// This is an alternative to assert which also persists in release
|
||||
/// builds. Use this instead of assert in situations where you want
|
||||
/// your users to see what's going wrong.
|
||||
/// This uses Kinc's log and error functionality to make errors
|
||||
/// visible.
|
||||
/// </remarks>
|
||||
/// <param name="condition">
|
||||
/// Exits the program if condition is false,
|
||||
/// otherwise does nothing.
|
||||
/// </param>
|
||||
KINC_FUNC void kinc_affirm(bool condition);
|
||||
|
||||
/// <summary>
|
||||
/// Exits the program when a condition is untrue and shows
|
||||
/// a provided error message.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// This is equivalent to kinc_affirm() but uses the provided message
|
||||
/// instead of a generic one.
|
||||
/// </remarks>
|
||||
/// <param name="condition">
|
||||
/// Exits the program if condition is false,
|
||||
/// otherwise does nothing.
|
||||
/// </param>
|
||||
/// <param name="format">
|
||||
/// The parameter is equivalent to the first printf parameter.
|
||||
/// </param>
|
||||
/// <param name="...">
|
||||
/// The parameter is equivalent to the second printf parameter.
|
||||
/// </param>
|
||||
KINC_FUNC void kinc_affirm_message(bool condition, const char *format, ...);
|
||||
|
||||
/// <summary>
|
||||
/// Equivalent to kinc_affirm_message but uses a va_list parameter.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// You will need this if you want to provide the parameters using va_start/va_end.
|
||||
/// </remarks>
|
||||
/// <param name="condition">
|
||||
/// Exits the program if condition is false,
|
||||
/// otherwise does nothing.
|
||||
/// </param>
|
||||
/// <param name="format">
|
||||
/// The parameter is equivalent to the first vprintf parameter.
|
||||
/// </param>
|
||||
/// <param name="...">
|
||||
/// The parameter is equivalent to the second vprintf parameter.
|
||||
/// </param>
|
||||
KINC_FUNC void kinc_affirm_args(bool condition, const char *format, va_list args);
|
||||
|
||||
/// <summary>
|
||||
/// Exits the program and shows a generic error message
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Mainly this just calls exit(EXIT_FAILURE) but will also use
|
||||
/// Kore's log function and on Windows show an error message box.
|
||||
/// </remarks>
|
||||
KINC_FUNC void kinc_error(void);
|
||||
|
||||
/// <summary>
|
||||
/// Exits the program and shows a provided error message.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// This is equivalent to kinc_error() but uses the provided message
|
||||
/// instead of a generic one.
|
||||
/// </remarks>
|
||||
/// <param name="format">
|
||||
/// The parameter is equivalent to the first printf parameter.
|
||||
/// </param>
|
||||
/// <param name="...">
|
||||
/// The parameter is equivalent to the second printf parameter.
|
||||
/// </param>
|
||||
KINC_FUNC void kinc_error_message(const char *format, ...);
|
||||
|
||||
/// <summary>
|
||||
/// Equivalent to kinc_error_message but uses a va_list parameter.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// You will need this if you want to provide the parameters using va_start/va_end.
|
||||
/// </remarks>
|
||||
/// <param name="format">
|
||||
/// The parameter is equivalent to the first vprintf parameter.
|
||||
/// </param>
|
||||
/// <param name="...">
|
||||
/// The parameter is equivalent to the second vprintf parameter.
|
||||
/// </param>
|
||||
KINC_FUNC void kinc_error_args(const char *format, va_list args);
|
||||
|
||||
#ifdef KINC_IMPLEMENTATION_ROOT
|
||||
#define KINC_IMPLEMENTATION
|
||||
#endif
|
||||
|
||||
#ifdef KINC_IMPLEMENTATION
|
||||
|
||||
#ifndef KINC_IMPLEMENTATION_ROOT
|
||||
#undef KINC_IMPLEMENTATION
|
||||
#endif
|
||||
#include <kinc/log.h>
|
||||
#ifndef KINC_IMPLEMENTATION_ROOT
|
||||
#define KINC_IMPLEMENTATION
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifdef KINC_WINDOWS
|
||||
|
||||
#include <kinc/backend/MiniWindows.h>
|
||||
#include <kinc/backend/SystemMicrosoft.h>
|
||||
#endif
|
||||
|
||||
void kinc_affirm(bool condition) {
|
||||
if (!condition) {
|
||||
kinc_error();
|
||||
}
|
||||
}
|
||||
|
||||
void kinc_affirm_message(bool condition, const char *format, ...) {
|
||||
if (!condition) {
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
kinc_error_args(format, args);
|
||||
va_end(args);
|
||||
}
|
||||
}
|
||||
|
||||
void kinc_affirm_args(bool condition, const char *format, va_list args) {
|
||||
if (!condition) {
|
||||
kinc_error_args(format, args);
|
||||
}
|
||||
}
|
||||
|
||||
void kinc_error(void) {
|
||||
kinc_error_message("Unknown error");
|
||||
}
|
||||
|
||||
void kinc_error_message(const char *format, ...) {
|
||||
{
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
kinc_log_args(KINC_LOG_LEVEL_ERROR, format, args);
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
#ifdef KINC_WINDOWS
|
||||
{
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
wchar_t buffer[4096];
|
||||
kinc_microsoft_format(format, args, buffer);
|
||||
MessageBoxW(NULL, buffer, L"Error", 0);
|
||||
va_end(args);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef KINC_NO_CLIB
|
||||
exit(EXIT_FAILURE);
|
||||
#endif
|
||||
}
|
||||
|
||||
void kinc_error_args(const char *format, va_list args) {
|
||||
kinc_log_args(KINC_LOG_LEVEL_ERROR, format, args);
|
||||
|
||||
#ifdef KINC_WINDOWS
|
||||
wchar_t buffer[4096];
|
||||
kinc_microsoft_format(format, args, buffer);
|
||||
MessageBoxW(NULL, buffer, L"Error", 0);
|
||||
#endif
|
||||
|
||||
#ifndef KINC_NO_CLIB
|
||||
exit(EXIT_FAILURE);
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Reference in New Issue
Block a user