5fbe631e82c60414a0e6c7ad055bde622db3ea00
7 #include "vg/vg_stdint.h"
8 #include "vg/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 vg_mutex log_print_mutex
;
24 u32 buffer_line_count
, buffer_line_current
;
28 void vg_console_append_to_log( const char *str
)
30 if( vg_log
.buffer_line_count
< vg_list_size( vg_log
.buffer
) )
31 vg_log
.buffer_line_count
++;
33 char *dest
= vg_log
.buffer
[ vg_log
.buffer_line_current
++ ];
35 for( int i
=0; i
<vg_list_size( vg_log
.buffer
[0] ); i
++ )
37 if( !str
[i
] || ( i
== vg_list_size(vg_log
.buffer
[0])-1 ) )
46 if( vg_log
.buffer_line_current
>= vg_list_size( vg_log
.buffer
) )
47 vg_log
.buffer_line_current
= 0;
50 VG_STATIC
void vg_log_write( FILE *file
, const char *prefix
,
51 const char *fmt
, va_list args
)
53 vg_mutex_lock( &log_print_mutex
);
58 for( i
=0; i
<vg_list_size( buffer
); i
++ )
61 buffer
[i
] = prefix
[i
];
66 j
= i
+ vsnprintf( buffer
+ i
, vg_list_size( buffer
) - i
-12, fmt
, args
);
67 strcpy( buffer
+ j
, KNRM
);
69 fputs( buffer
, file
);
71 vg_console_append_to_log( buffer
);
72 vg_mutex_unlock( &log_print_mutex
);
75 VG_STATIC
void vg_log_init(void)
77 vg_mutex_init( &log_print_mutex
);
80 #define VG_LOGX( NAME, PIPE, PFX ) \
81 VG_STATIC void NAME(const char *fmt, ...) \
84 va_start( args, fmt ); \
85 vg_log_write( PIPE, (PFX), fmt, args ); \
89 VG_LOGX( vg_success
, stdout
, (KGRN
"success" KWHT
"| " KGRN
) )
90 VG_LOGX( vg_info
, stdout
, (KNRM
" info" KWHT
"| " KNRM
) )
91 VG_LOGX( vg_warn
, stdout
, (KYEL
" warn" KWHT
"| " KYEL
) )
92 VG_LOGX( vg_error
, stderr
, (KRED
" error" KWHT
"| " KRED
) )
93 VG_LOGX( vg_low
, stdout
, (KWHT
" log" KWHT
"| " KWHT
) )