8 #include "vg_platform.h"
10 #define KNRM "\x1B[0m"
11 #define KRED "\x1B[31m"
12 #define KGRN "\x1B[32m"
13 #define KYEL "\x1B[33m"
14 #define KBLU "\x1B[34m"
15 #define KMAG "\x1B[35m"
16 #define KCYN "\x1B[36m"
17 #define KWHT "\x1B[37m"
19 #define PRINTF_v2f( V2 ) "%.4f %.4f\n", V2[0], V2[1]
20 #define PRINTF_v3f( V3 ) "%.4f %.4f %.4f\n", V3[0], V3[1], V3[2]
21 #define PRINTF_v4f( V4 ) "%.4f %.4f %.4f %.4f\n", V4[0], V4[1], V4[2], V4[3]
24 static SDL_SpinLock log_print_sl
;
30 u32 buffer_line_count
, buffer_line_current
;
34 void _vg_console_append_to_log( const char *str
)
36 if( vg_log
.buffer_line_count
< vg_list_size( vg_log
.buffer
) )
37 vg_log
.buffer_line_count
++;
39 char *dest
= vg_log
.buffer
[ vg_log
.buffer_line_current
++ ];
41 for( int i
=0; i
<vg_list_size( vg_log
.buffer
[0] ); i
++ ){
42 if( !str
[i
] || ( i
== vg_list_size(vg_log
.buffer
[0])-1 ) ){
50 if( vg_log
.buffer_line_current
>= vg_list_size( vg_log
.buffer
) )
51 vg_log
.buffer_line_current
= 0;
54 VG_STATIC
void _vg_log_write( FILE *file
, const char *prefix
,
55 const char *fmt
, va_list args
)
58 SDL_AtomicLock( &log_print_sl
);
64 for( i
=0; i
<vg_list_size( buffer
); i
++ ){
66 buffer
[i
] = prefix
[i
];
71 j
= i
+ vsnprintf( buffer
+ i
, vg_list_size( buffer
) - i
-12, fmt
, args
);
72 strcpy( buffer
+ j
, KNRM
);
74 fputs( buffer
, file
);
76 _vg_console_append_to_log( buffer
);
78 SDL_AtomicUnlock( &log_print_sl
);
82 VG_STATIC
void _vg_log_init(void)
86 #define VG_LOGX( NAME, PIPE, PFX ) \
87 VG_STATIC void NAME(const char *fmt, ...) \
90 va_start( args, fmt ); \
91 _vg_log_write( PIPE, (PFX), fmt, args ); \
95 VG_LOGX( vg_success
, stdout
, (KGRN
"success" KWHT
"| " KGRN
) )
96 VG_LOGX( vg_info
, stdout
, (KNRM
" info" KWHT
"| " KNRM
) )
97 VG_LOGX( vg_warn
, stdout
, (KYEL
" warn" KWHT
"| " KYEL
) )
98 VG_LOGX( vg_error
, stderr
, (KRED
" error" KWHT
"| " KRED
) )
99 VG_LOGX( vg_low
, stdout
, (KWHT
" log" KWHT
"| " KWHT
) )
101 #endif /* VG_LOG_H */