X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=vg%2Fvg_io.h;h=afd134f45a05a76d72d0a69ee7a5076a2eeecd93;hb=3363633178b1eea582304742ad1202487af0feb1;hp=89254122208a4882c813db80da2b350910ec18da;hpb=f17b92e32e2edae3692d5ea87844fbdf4a779952;p=fishladder.git diff --git a/vg/vg_io.h b/vg/vg_io.h index 8925412..afd134f 100644 --- a/vg/vg_io.h +++ b/vg/vg_io.h @@ -12,23 +12,43 @@ #define KCYN "\x1B[36m" #define KWHT "\x1B[37m" -#define VG_LOG_WRITE( FILE, PREFIX ) \ - fprintf( FILE, PREFIX ); \ - va_list args; \ - va_start( args, fmt ); \ - vfprintf( FILE, fmt, args ); \ - va_end( args ); \ - fprintf( FILE, KNRM ); +void (*vg_log_callback)( const char *str ) = NULL; -void vg_success( const char *fmt, ... ) { VG_LOG_WRITE( stdout, (KGRN "success" KWHT "| " KGRN) ); } -void vg_info( const char *fmt, ... ) { VG_LOG_WRITE( stdout, (KNRM " info" KWHT "| " KNRM) ); } -void vg_warn( const char *fmt, ... ) { VG_LOG_WRITE( stdout, (KYEL " warn" KWHT "| " KYEL) ); } -void vg_error( const char *fmt, ... ) { VG_LOG_WRITE( stderr, (KRED " error" KWHT "| " KRED) ); } +static void vg_log_write( FILE *file, const char *prefix, const char *fmt, va_list args ) +{ + char buffer[512]; + 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 -2, fmt, args ); + strcpy( buffer + j, KNRM ); + + fputs( buffer, file ); + + if( vg_log_callback ) + vg_log_callback( buffer ); +} + +static void vg_success( const char *fmt, ... ) + { va_list args; va_start( args, fmt ); vg_log_write( stdout, (KGRN "success" KWHT "| " KGRN), fmt, args ); va_end( args ); } +static void vg_info( const char *fmt, ... ) + { va_list args; va_start( args, fmt ); vg_log_write( stdout, (KNRM " info" KWHT "| " KNRM), fmt, args ); va_end( args ); } +static void vg_warn( const char *fmt, ... ) + { va_list args; va_start( args, fmt ); vg_log_write( stdout, (KYEL " warn" KWHT "| " KYEL), fmt, args ); va_end( args ); } +static void vg_error( const char *fmt, ... ) + { va_list args; va_start( args, fmt ); vg_log_write( stderr, (KRED " error" KWHT "| " KRED), fmt, args ); va_end( args ); } // FILE IO // =========================================================================================================== -i64 vg_file_size( FILE *fileptr ) +static i64 vg_file_size( FILE *fileptr ) { fseek( fileptr, 0, SEEK_END ); i64 fsize = ftell( fileptr ); @@ -37,7 +57,7 @@ i64 vg_file_size( FILE *fileptr ) return fsize; } -void *vg_disk_open_read( const char *path, int const reserve_end, i64 *size ) +static void *vg_disk_open_read( const char *path, int const reserve_end, i64 *size ) { FILE *f = fopen( path, "rb" ); if( f ) @@ -66,7 +86,7 @@ void *vg_disk_open_read( const char *path, int const reserve_end, i64 *size ) } } -char *vg_disk_load_text( const char *path, i64 *size ) +static char *vg_disk_load_text( const char *path, i64 *size ) { char *buf; i64 fsize; @@ -82,24 +102,39 @@ char *vg_disk_load_text( const char *path, i64 *size ) return NULL; } -void *vg_asset_read_s( const char *path, i64 *size ) +static void *vg_asset_read_s( const char *path, i64 *size ) { return vg_disk_open_read( path, 0, size ); } -void *vg_asset_read( const char *path ) +static void *vg_asset_read( const char *path ) { i64 size; return vg_disk_open_read( path, 0, &size ); } -char *vg_textasset_read_s( const char *path, i64 *size ) +static char *vg_textasset_read_s( const char *path, i64 *size ) { return vg_disk_load_text( path, size ); } -char *vg_textasset_read( const char *name ) +static char *vg_textasset_read( const char *name ) { i64 size; return vg_disk_load_text( name, &size ); } + +static int vg_asset_write( const char *path, void *data, i64 size ) +{ + FILE *f = fopen( path, "wb" ); + if( f ) + { + fwrite( data, size, 1, f ); + fclose( f ); + return 1; + } + else + { + return 0; + } +}