bad char
[vg.git] / vg_log.h
index cc42761b69e7dd5777e60765f47d7cfaac669e6c..cf2b7370301b8de0db02a163b0e2ebda9c648c43 100644 (file)
--- a/vg_log.h
+++ b/vg_log.h
@@ -1,11 +1,23 @@
-#ifndef VG_LOG_H
-#define VG_LOG_H
+#pragma once
 
-#include <stdarg.h>
-#include <string.h>
-#include <malloc.h>
-#include "vg_stdint.h"
 #include "vg_platform.h"
+#include <stdio.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",KNRM,__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__)
 
 #define KNRM  "\x1B[0m"
 #define KBLK  "\x1B[30m"
 #define PRINTF_v3f( V3 ) "%.4f %.4f %.4f\n",      V3[0], V3[1], V3[2]
 #define PRINTF_v4f( V4 ) "%.4f %.4f %.4f %.4f\n", V4[0], V4[1], V4[2], V4[3]
 
-#ifdef VG_GAME
-static SDL_SpinLock log_print_sl;
+#ifdef _WIN32
+ #define PRINTF_U64 "%llu"
+#else
+ #define PRINTF_U64 "%lu"
 #endif
 
-struct vg_log
-{
-   char buffer[64][96];
-   u32  buffer_line_count, buffer_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 ++;
-
-   char *dest = vg_log.buffer[ vg_log.buffer_line_current ++ ];
-
-   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;
-      }
-
-      dest[i] = str[i];
-   }
-   
-   if( vg_log.buffer_line_current >= vg_list_size( vg_log.buffer ) )
-      vg_log.buffer_line_current = 0;
-}
+#ifdef VG_ENGINE
+ #include "dep/sdl/include/SDL.h"
+#endif
 
-VG_STATIC void _vg_log_write( FILE *file, const char *prefix, 
-                              const char *fmt, va_list args )
+struct vg_log
 {
-#ifdef VG_GAME
-   SDL_AtomicLock( &log_print_sl );
-#endif
+   char log[64][96];
+   u32  log_line_count, log_line_current;
 
-       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 );
+#ifdef VG_ENGINE
+   SDL_SpinLock print_sl;
 #endif
 }
+extern vg_log;
 
-#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 );                           \
-}
+void vg_logx( FILE *file, 
+              const char *location, const char *prefix, 
+              const char *colour,
+              const char *fmt, ... );
+
+void _vg_logx_va( FILE *file, 
+                  const char *location, const char *prefix,
+                  const char *colour,
+                  const char *fmt, va_list 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) )
+void vg_print_backtrace(void);
 
-#endif /* VG_LOG_H */