1 // Copyright (C) 2021 Harry Godden (hgn) - All Rights Reserved
4 // ===========================================================================================================
7 #define KRED "\x1B[31m"
8 #define KGRN "\x1B[32m"
9 #define KYEL "\x1B[33m"
10 #define KBLU "\x1B[34m"
11 #define KMAG "\x1B[35m"
12 #define KCYN "\x1B[36m"
13 #define KWHT "\x1B[37m"
15 void (*vg_log_callback
)( const char *str
) = NULL
;
17 static void vg_log_write( FILE *file
, const char *prefix
, const char *fmt
, va_list args
)
22 for( i
= 0; i
< vg_list_size( buffer
); i
++ )
25 buffer
[i
] = prefix
[i
];
30 j
= i
+ vsnprintf( buffer
+ i
, vg_list_size( buffer
) - i
-2, fmt
, args
);
31 strcpy( buffer
+ j
, KNRM
);
33 fputs( buffer
, file
);
36 vg_log_callback( buffer
);
39 static void vg_success( const char *fmt
, ... )
40 { va_list args
; va_start( args
, fmt
); vg_log_write( stdout
, (KGRN
"success" KWHT
"| " KGRN
), fmt
, args
); va_end( args
); }
41 static void vg_info( const char *fmt
, ... )
42 { va_list args
; va_start( args
, fmt
); vg_log_write( stdout
, (KNRM
" info" KWHT
"| " KNRM
), fmt
, args
); va_end( args
); }
43 static void vg_warn( const char *fmt
, ... )
44 { va_list args
; va_start( args
, fmt
); vg_log_write( stdout
, (KYEL
" warn" KWHT
"| " KYEL
), fmt
, args
); va_end( args
); }
45 static void vg_error( const char *fmt
, ... )
46 { va_list args
; va_start( args
, fmt
); vg_log_write( stderr
, (KRED
" error" KWHT
"| " KRED
), fmt
, args
); va_end( args
); }
49 // ===========================================================================================================
51 static i64
vg_file_size( FILE *fileptr
)
53 fseek( fileptr
, 0, SEEK_END
);
54 i64 fsize
= ftell( fileptr
);
55 fseek( fileptr
, 0, SEEK_SET
);
60 static void *vg_disk_open_read( const char *path
, int const reserve_end
, i64
*size
)
62 FILE *f
= fopen( path
, "rb" );
65 i64 fsize
= vg_file_size( f
);
66 void *buf
= malloc( fsize
+ reserve_end
);
70 // Invalid / corrupt read
71 if( fread( buf
, 1, fsize
, f
) != fsize
)
89 static char *vg_disk_load_text( const char *path
, i64
*size
)
94 if( (buf
= vg_disk_open_read( path
, 1, &fsize
)) )
105 static void *vg_asset_read_s( const char *path
, i64
*size
)
107 return vg_disk_open_read( path
, 0, size
);
110 static void *vg_asset_read( const char *path
)
113 return vg_disk_open_read( path
, 0, &size
);
116 static char *vg_textasset_read_s( const char *path
, i64
*size
)
118 return vg_disk_load_text( path
, size
);
121 static char *vg_textasset_read( const char *name
)
124 return vg_disk_load_text( name
, &size
);
127 static int vg_asset_write( const char *path
, void *data
, i64 size
)
129 FILE *f
= fopen( path
, "wb" );
132 fwrite( data
, size
, 1, f
);