4 #include "vg_platform.h"
14 static void _vg_log_append_line( const char *str
)
16 if( vg_log
.log_line_count
< vg_list_size( vg_log
.log
) )
17 vg_log
.log_line_count
++;
19 char *dest
= vg_log
.log
[ vg_log
.log_line_current
++ ];
20 vg_strncpy( str
, dest
, vg_list_size(vg_log
.log
[0]), k_strncpy_allow_cutoff
);
22 if( vg_log
.log_line_current
>= vg_list_size( vg_log
.log
) )
23 vg_log
.log_line_current
= 0;
26 void _vg_logx_va( FILE *file
,
27 const char *location
, const char *prefix
,
29 const char *fmt
, va_list args
)
32 /* @model.h:2000 info| dwahjdiawdjaiwdwadwa djaidjwa\n
33 * | djwaidwaj waodawh a\n
38 SDL_AtomicLock( &vg_log
.print_sl
);
43 vsnprintf( buffer
, vg_list_size(buffer
), fmt
, args
);
45 const char *line
= buffer
;
48 for( u32 i
=0; i
<vg_list_size(buffer
); i
++ ){
51 if( c
== '\0' || c
== '\n' ){
54 const char *line_prefix
= "",
57 if( line
== buffer
) {
59 line_location
= location
;
62 snprintf( logline
, 96, "%s%7s" KNRM
"|%s %s",
63 colour
, line_prefix
, colour
, line
);
64 _vg_log_append_line( logline
);
68 const char *thread_colours
[] = {
69 KGRN
, KMAG
, KCYN
, KYEL
, KBLU
72 const char *colour
= thread_colours
[
73 (vg_thread_purpose() % vg_list_size( thread_colours
))];
75 fprintf( file
, "%s[%u]"KNRM
"%.32s",
76 colour
, vg_thread_purpose(), line_location
);
78 fprintf( file
, KNRM
"%.32s", line_location
);
82 fputs( logline
, file
);
86 if( c
== '\0' ) break;
87 if( buffer
[i
+1] == '\0' ) break;
93 SDL_AtomicUnlock( &vg_log
.print_sl
);
97 void vg_logx( FILE *file
,
98 const char *location
, const char *prefix
,
100 const char *fmt
, ... )
104 va_start( args
, fmt
);
106 #ifdef VG_LOG_SOURCE_INFO
111 prefix
, colour
, fmt
, args
);
115 void vg_print_backtrace(void)
122 size
= backtrace( array
, 20 );
123 strings
= backtrace_symbols( array
, size
);
125 if( strings
!= NULL
)
127 vg_error( "---------------- gnu backtrace -------------\n" );
129 for( int i
=0; i
<size
; i
++ )
130 vg_info( "%s\n", strings
[i
] );
132 vg_error( "---------------- gnu backtrace -------------\n" );