logger update
[vg.git] / vg_log.h
index b28cefbe1ec8bf671af453872794684d8d861d6f..8d2420a5fa7125d38ef05343d7422ea7f024c2e0 100644 (file)
--- a/vg_log.h
+++ b/vg_log.h
@@ -1,23 +1,22 @@
 #ifndef VG_LOG_H
 #define VG_LOG_H
 
-#include <stdarg.h>
-#include <string.h>
-#include <malloc.h>
-#include "vg_stdint.h"
-#include "vg_platform.h"
+#define VG_LOG_MCSTR(S) VG_LOG_MCSTR2(S)
+#define VG_LOG_MCSTR2(S) #S
+#define VG_LOG_WHERE "@"__FILE__":"VG_LOG_MCSTR(__LINE__)\
+        "                                    "
+
+#define vg_success( ... ) \
+ vg_logx(stdout,VG_LOG_WHERE,"success",KGRN,__VA_ARGS__)
+#define vg_info( ... ) \
+ vg_logx(stdout,VG_LOG_WHERE,"info",KWHT,__VA_ARGS__)
+#define vg_warn( ... ) \
+ vg_logx(stdout,VG_LOG_WHERE,"warn",KYEL,__VA_ARGS__ )
+#define vg_error( ... ) \
+ vg_logx(stdout,VG_LOG_WHERE,"error",KRED,__VA_ARGS__)
+#define vg_low( ... ) \
+ vg_logx(stdout,VG_LOG_WHERE,"log",KWHT,__VA_ARGS__)
 
-#ifdef _WIN32
-#define KNRM  ""
-#define KBLK  ""
-#define KRED  ""
-#define KGRN  ""
-#define KYEL  ""
-#define KBLU  ""
-#define KMAG  ""
-#define KCYN  ""
-#define KWHT  ""
-#else
 #define KNRM  "\x1B[0m"
 #define KBLK  "\x1B[30m"
 #define KRED  "\x1B[31m"
@@ -27,7 +26,6 @@
 #define KMAG  "\x1B[35m"
 #define KCYN  "\x1B[36m"
 #define KWHT  "\x1B[37m"
-#endif
 
 #define PRINTF_v2f( V2 ) "%.4f %.4f\n",           V2[0], V2[1]
 #define PRINTF_v3f( V3 ) "%.4f %.4f %.4f\n",      V3[0], V3[1], V3[2]
 #endif
 
 #ifdef VG_GAME
-static SDL_SpinLock log_print_sl;
+ #include "dep/sdl/include/SDL.h"
+ static SDL_SpinLock log_print_sl;
 #endif
 
-struct vg_log
-{
-   char buffer[64][96];
-   u32  buffer_line_count, buffer_line_current;
+struct vg_log{
+   char log[64][96];
+   u32  log_line_count, log_line_current;
 }
 static vg_log;
 
-void _vg_console_append_to_log( const char *str )
-{
-   if( vg_log.buffer_line_count < vg_list_size( vg_log.buffer ) )
-      vg_log.buffer_line_count ++;
+static void vg_logx( FILE *file, 
+                     const char *location, const char *prefix, 
+                     const char *colour,
+                     const char *fmt, ... );
 
-   char *dest = vg_log.buffer[ vg_log.buffer_line_current ++ ];
+static void _vg_logx_va( FILE *file, 
+                         const char *location, const char *prefix,
+                         const char *colour,
+                         const char *fmt, va_list args );
 
-   for( int i=0; i<vg_list_size( vg_log.buffer[0] ); i++ ){
-      if( !str[i] || ( i == vg_list_size(vg_log.buffer[0])-1 ) ){
-         dest[i] = '\0';
-         break;
-      }
+static void vg_print_backtrace(void);
 
-      dest[i] = str[i];
-   }
-   
-   if( vg_log.buffer_line_current >= vg_list_size( vg_log.buffer ) )
-      vg_log.buffer_line_current = 0;
-}
-
-VG_STATIC void _vg_log_write( FILE *file, const char *prefix, 
-                              const char *fmt, va_list args )
-{
-#ifdef VG_GAME
-   SDL_AtomicLock( &log_print_sl );
-#endif
 
-       char buffer[ 4096 ];
-       int i, j;
-       
-       for( i=0; i<vg_list_size( buffer ); i ++ ){
-               if( prefix[i] )
-                       buffer[i] = prefix[i];
-               else 
-                       break;
-       }
-       
-       j = i + vsnprintf( buffer + i, vg_list_size( buffer ) - i -12, fmt, args );
-       strcpy( buffer + j, KNRM );
-       
-       fputs( buffer, file );
-   
-   _vg_console_append_to_log( buffer );
-#ifdef VG_GAME
-   SDL_AtomicUnlock( &log_print_sl );
 #endif
-}
-
-#define VG_LOGX( NAME, PIPE, PFX )           \
-VG_STATIC void NAME(const char *fmt, ...)    \
-{                                            \
-   va_list args;                             \
-   va_start( args, fmt );                    \
-   _vg_log_write( PIPE, (PFX), fmt, args );   \
-   va_end( args );                           \
-}
-
-VG_LOGX( vg_success, stdout, (KGRN "success" KWHT "| " KGRN) )
-VG_LOGX( vg_info,    stdout, (KNRM "   info" KWHT "| " KNRM) )
-VG_LOGX( vg_warn,    stdout, (KYEL "   warn" KWHT "| " KYEL) )
-VG_LOGX( vg_error,   stderr, (KRED "  error" KWHT "| " KRED) )
-VG_LOGX( vg_low,     stdout, (KWHT "    log" KWHT "| " KWHT) )
-
-#endif /* VG_LOG_H */