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"
20 static SDL_SpinLock log_print_sl
;
26 u32 buffer_line_count
, buffer_line_current
;
30 void _vg_console_append_to_log( const char *str
)
32 if( vg_log
.buffer_line_count
< vg_list_size( vg_log
.buffer
) )
33 vg_log
.buffer_line_count
++;
35 char *dest
= vg_log
.buffer
[ vg_log
.buffer_line_current
++ ];
37 for( int i
=0; i
<vg_list_size( vg_log
.buffer
[0] ); i
++ )
39 if( !str
[i
] || ( i
== vg_list_size(vg_log
.buffer
[0])-1 ) )
48 if( vg_log
.buffer_line_current
>= vg_list_size( vg_log
.buffer
) )
49 vg_log
.buffer_line_current
= 0;
52 VG_STATIC
void _vg_log_write( FILE *file
, const char *prefix
,
53 const char *fmt
, va_list args
)
56 SDL_AtomicLock( &log_print_sl
);
62 for( i
=0; i
<vg_list_size( buffer
); i
++ )
65 buffer
[i
] = prefix
[i
];
70 j
= i
+ vsnprintf( buffer
+ i
, vg_list_size( buffer
) - i
-12, fmt
, args
);
71 strcpy( buffer
+ j
, KNRM
);
73 fputs( buffer
, file
);
75 _vg_console_append_to_log( buffer
);
77 SDL_AtomicUnlock( &log_print_sl
);
81 VG_STATIC
void _vg_log_init(void)
85 #define VG_LOGX( NAME, PIPE, PFX ) \
86 VG_STATIC void NAME(const char *fmt, ...) \
89 va_start( args, fmt ); \
90 _vg_log_write( PIPE, (PFX), fmt, args ); \
94 VG_LOGX( vg_success
, stdout
, (KGRN
"success" KWHT
"| " KGRN
) )
95 VG_LOGX( vg_info
, stdout
, (KNRM
" info" KWHT
"| " KNRM
) )
96 VG_LOGX( vg_warn
, stdout
, (KYEL
" warn" KWHT
"| " KYEL
) )
97 VG_LOGX( vg_error
, stderr
, (KRED
" error" KWHT
"| " KRED
) )
98 VG_LOGX( vg_low
, stdout
, (KWHT
" log" KWHT
"| " KWHT
) )
100 #endif /* VG_LOG_H */