From c7d8f88eb480daceff4a20b63c6dd5e56e83631e Mon Sep 17 00:00:00 2001 From: Aoran Zeng Date: Wed, 30 Aug 2023 10:57:17 +0800 Subject: [PATCH] Add `xy_log()` and `xy_info()` `xy_error()` --- helper.h | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/helper.h b/helper.h index 3413c55..f232ecd 100644 --- a/helper.h +++ b/helper.h @@ -11,6 +11,7 @@ #include #include +#include #ifdef _WIN32 #include @@ -43,6 +44,53 @@ xy_strjoin (const char* str1, const char* str2) } +#define XY_INFO 1 +#define XY_SUCCESS 1<<1 +#define XY_WARN 1<<2 +#define XY_ERROR 1<<3 + +static void +xy_log (int level, const char* str) +{ + char* color_fmt_str = NULL; + + bool to_stderr = false; + + if (level & XY_INFO) { + color_fmt_str = "\033[34m%s\033[0m"; // 蓝色 + } + else if (level & XY_SUCCESS) { + color_fmt_str = "\033[32m%s\033[0m"; // 绿色 + } + else if (level & XY_WARN) { + color_fmt_str = "\033[33m%s\033[0m\n"; // 黄色 + to_stderr = true; + } + else if (level & XY_ERROR) { + color_fmt_str = "\033[31m%s\033[0m\n"; // 红色 + to_stderr = true; + } + else { + //xy_assert ("CAN'T REACH!"); + } + + // -2 把中间%s减掉,-1 把末尾nul减掉 + size_t len = sizeof(color_fmt_str) -2 -1; + char* buf = malloc(strlen(str) + len + 1); + + sprintf (buf, color_fmt_str, str); + if (to_stderr) { + fprintf(stderr, buf); + } else { + puts(buf); + } + free(buf); +} + +#define xy_info(str) xy_log (XY_INFO, str) +#define xy_error(str) xy_log (XY_ERROR, str) + + static void xy_success (const char* str1) {