8 #include "vg_platform.h"
21 #define KNRM "\x1B[0m"
22 #define KBLK "\x1B[30m"
23 #define KRED "\x1B[31m"
24 #define KGRN "\x1B[32m"
25 #define KYEL "\x1B[33m"
26 #define KBLU "\x1B[34m"
27 #define KMAG "\x1B[35m"
28 #define KCYN "\x1B[36m"
29 #define KWHT "\x1B[37m"
32 #define PRINTF_v2f( V2 ) "%.4f %.4f\n", V2[0], V2[1]
33 #define PRINTF_v3f( V3 ) "%.4f %.4f %.4f\n", V3[0], V3[1], V3[2]
34 #define PRINTF_v4f( V4 ) "%.4f %.4f %.4f %.4f\n", V4[0], V4[1], V4[2], V4[3]
37 #define PRINTF_U64 "%llu"
39 #define PRINTF_U64 "%lu"
43 static SDL_SpinLock log_print_sl
;
49 u32 buffer_line_count
, buffer_line_current
;
53 void _vg_console_append_to_log( const char *str
)
55 if( vg_log
.buffer_line_count
< vg_list_size( vg_log
.buffer
) )
56 vg_log
.buffer_line_count
++;
58 char *dest
= vg_log
.buffer
[ vg_log
.buffer_line_current
++ ];
60 for( int i
=0; i
<vg_list_size( vg_log
.buffer
[0] ); i
++ ){
61 if( !str
[i
] || ( i
== vg_list_size(vg_log
.buffer
[0])-1 ) ){
69 if( vg_log
.buffer_line_current
>= vg_list_size( vg_log
.buffer
) )
70 vg_log
.buffer_line_current
= 0;
73 VG_STATIC
void _vg_log_write( FILE *file
, const char *prefix
,
74 const char *fmt
, va_list args
)
77 SDL_AtomicLock( &log_print_sl
);
83 for( i
=0; i
<vg_list_size( buffer
); i
++ ){
85 buffer
[i
] = prefix
[i
];
90 j
= i
+ vsnprintf( buffer
+ i
, vg_list_size( buffer
) - i
-12, fmt
, args
);
91 strcpy( buffer
+ j
, KNRM
);
93 fputs( buffer
, file
);
95 _vg_console_append_to_log( buffer
);
97 SDL_AtomicUnlock( &log_print_sl
);
101 #define VG_LOGX( NAME, PIPE, PFX ) \
102 VG_STATIC void NAME(const char *fmt, ...) \
105 va_start( args, fmt ); \
106 _vg_log_write( PIPE, (PFX), fmt, args ); \
110 VG_LOGX( vg_success
, stdout
, (KGRN
"success" KWHT
"| " KGRN
) )
111 VG_LOGX( vg_info
, stdout
, (KNRM
" info" KWHT
"| " KNRM
) )
112 VG_LOGX( vg_warn
, stdout
, (KYEL
" warn" KWHT
"| " KYEL
) )
113 VG_LOGX( vg_error
, stderr
, (KRED
" error" KWHT
"| " KRED
) )
114 VG_LOGX( vg_low
, stdout
, (KWHT
" log" KWHT
"| " KWHT
) )
116 #endif /* VG_LOG_H */