From aa7cb11056d2b40ad308b35d0cff77b40ecdf6df Mon Sep 17 00:00:00 2001 From: Bruno Raoult Date: Sat, 1 Jul 2023 20:56:26 +0200 Subject: [PATCH] add FILE* output --- include/debug.h | 23 ++++++++++++++--------- libsrc/debug.c | 29 ++++++++++++++++++----------- src/chessdefs.h | 3 +++ src/eval.c | 4 +++- src/fen.c | 2 +- src/piece.c | 2 +- 6 files changed, 40 insertions(+), 23 deletions(-) diff --git a/include/debug.h b/include/debug.h index 3619f24..785d0ef 100644 --- a/include/debug.h +++ b/include/debug.h @@ -14,29 +14,34 @@ #ifndef DEBUG_H #define DEBUG_H +#include #include #include +#include #include -#define _unused __attribute__((__unused__)) #define _printf __attribute__ ((format (printf, 6, 7))) #ifdef DEBUG_DEBUG -void debug_init(u32 level); + +void debug_init(u32 level, FILE *stream); void debug_level_set(u32 level); -u32 debug_level_get(void); +void debug_stream_set(FILE *stream); void _printf debug(u32 level, bool timestamp, u32 indent, const char *src, u32 line, const char *fmt, ...); #else /* DEBUG_DEBUG */ -static inline void debug_init(_unused u32 level) {} -static inline void debug_level_set(_unused u32 level) {} -static inline void _printf debug(_unused u32 level, _unused bool timestamp, - _unused u32 indent, _unused const char *src, - _unused u32 line, _unused const char *fmt, ...) {} + +static inline void debug_init(__unused u32 level, __unused FILE *stream) {} +static inline void debug_level_set(__unused u32 level) {} +static inline void debug_stream_set(__unused FILE *stream) {} +static inline void _printf debug(__unused u32 level, __unused bool timestamp, + __unused u32 indent, __unused const char *src, + __unused u32 line, __unused const char *fmt, ...) {} + #endif /* DEBUG_DEBUG */ -#undef _unused + #undef _printf /** diff --git a/libsrc/debug.c b/libsrc/debug.c index ac1d2a6..c6e5974 100644 --- a/libsrc/debug.c +++ b/libsrc/debug.c @@ -26,19 +26,26 @@ #define MILLISEC 1000000 /* milli sec in sec */ static long long timer_start; /* in nanosecond */ -static u32 debug_level=0; +static u32 debug_level = 0; +static FILE *stream = NULL; void debug_level_set(u32 level) { debug_level = level; - - log(1, "debug level set to %u\n", level); + log(0, "debug level set to %u\n", level); } -void debug_init(u32 level) +void debug_stream_set(FILE *_stream) +{ + stream = _stream; + log(0, "stream set to %d\n", stream? fileno(stream): -1); +} + +void debug_init(u32 level, FILE *_stream) { struct timespec timer; + debug_stream_set(_stream); debug_level_set(level); if (!clock_gettime(CLOCK_MONOTONIC, &timer)) { timer_start = timer.tv_sec * NANOSEC + timer.tv_nsec; @@ -66,28 +73,28 @@ inline static long long timer_elapsed() void debug(u32 level, bool timestamp, u32 indent, const char *src, u32 line, const char *fmt, ...) { - if (level > debug_level) + if (!stream || level > debug_level) return; va_list ap; if (indent) - printf("%*s", 2*(indent-1), ""); + fprintf(stream, "%*s", 2*(indent-1), ""); if (timestamp) { long long diff = timer_elapsed(); - printf("%lld.%03lld ", diff/NANOSEC, (diff/1000000)%1000); - printf("%010lld ", diff); + fprintf(stream, "%lld.%03lld ", diff/NANOSEC, (diff/1000000)%1000); + fprintf(stream, "%010lld ", diff); } if (src) { if (line) - printf("[%s:%u] ", src, line); + fprintf(stream, "[%s:%u] ", src, line); else - printf("[%s] ", src); + fprintf(stream, "[%s] ", src); } va_start(ap, fmt); - vprintf(fmt, ap); + vfprintf(stream, fmt, ap); va_end(ap); } diff --git a/src/chessdefs.h b/src/chessdefs.h index b266286..f98f7be 100644 --- a/src/chessdefs.h +++ b/src/chessdefs.h @@ -17,6 +17,9 @@ #include /* piece_t bits structure + * MSB 8 7 6 5 4 3 2 1 LSB + * 1: color (0 for white) + * 2-7: bit set for pawn (2), knight, bishop, rook, queen, king (7) */ typedef u8 piece_t; diff --git a/src/eval.c b/src/eval.c index de26eb5..1391c74 100644 --- a/src/eval.c +++ b/src/eval.c @@ -98,7 +98,8 @@ int main(int ac, char**av) pos_t *pos; eval_t res; - debug_init(5); + debug_init(5, stderr); + piece_pool_init(); moves_pool_init(); pos_pool_init(); @@ -118,6 +119,7 @@ int main(int ac, char**av) //pos_print(pos); //pos_pieces_print(pos); moves_gen(pos, pos->turn, true); + pos_print(pos); moves_print(pos, M_PR_SEPARATE); res = eval(pos); printf("eval=%d centipawns)\n", res); diff --git a/src/fen.c b/src/fen.c index f2cdbd9..a7b4fd0 100644 --- a/src/fen.c +++ b/src/fen.c @@ -179,7 +179,7 @@ int main(int ac, char**av) { pos_t *pos; - debug_init(5); + debug_init(5, stderr); piece_pool_init(); pos_pool_init(); pos = pos_get(); diff --git a/src/piece.c b/src/piece.c index d257f81..5b3dc19 100644 --- a/src/piece.c +++ b/src/piece.c @@ -119,7 +119,7 @@ int main(int ac, char**av) { pos_t *pos; printf("zobi\n");fflush(stdout); - debug_level_set(6); + debug_init(6, stderr); log_f(5, "kfsjdhg\n"); pos_pool_init(); pos = pos_get();