1 /* Copyright (C) 2021-2022 Harry Godden (hgn) - All Rights Reserved */
4 #define KRED "\x1B[31m"
5 #define KGRN "\x1B[32m"
6 #define KYEL "\x1B[33m"
7 #define KBLU "\x1B[34m"
8 #define KMAG "\x1B[35m"
9 #define KCYN "\x1B[36m"
10 #define KWHT "\x1B[37m"
12 void (*vg_log_callback
)( const char *str
) = NULL
;
14 static void vg_log_write( FILE *file
, const char *prefix
,
15 const char *fmt
, va_list args
)
20 for( i
= 0; i
< vg_list_size( buffer
); i
++ )
23 buffer
[i
] = prefix
[i
];
28 j
= i
+ vsnprintf( buffer
+ i
, vg_list_size( buffer
) - i
-2, fmt
, args
);
29 strcpy( buffer
+ j
, KNRM
);
31 fputs( buffer
, file
);
34 vg_log_callback( buffer
);
37 #define VG_LOGX( NAME, PIPE, PFX ) \
38 static void NAME(const char *fmt, ...) \
41 va_start( args, fmt ); \
42 vg_log_write( PIPE, (PFX), fmt, args ); \
46 VG_LOGX( vg_success
, stdout
, (KGRN
"success" KWHT
"| " KGRN
) )
47 VG_LOGX( vg_info
, stdout
, (KNRM
" info" KWHT
"| " KNRM
) )
48 VG_LOGX( vg_log
, stdout
, (KWHT
" log" KWHT
"| " KWHT
) )
49 VG_LOGX( vg_warn
, stdout
, (KYEL
" warn" KWHT
"| " KYEL
) )
50 VG_LOGX( vg_error
, stderr
, (KRED
" error" KWHT
"| " KRED
) )
55 static i64
vg_file_size( FILE *fileptr
)
57 fseek( fileptr
, 0, SEEK_END
);
58 i64 fsize
= ftell( fileptr
);
59 fseek( fileptr
, 0, SEEK_SET
);
64 static void *vg_disk_open_read( const char *path
, int reserve_end
, i64
*size
)
66 FILE *f
= fopen( path
, "rb" );
69 i64 fsize
= vg_file_size( f
);
70 void *buf
= malloc( fsize
+ reserve_end
);
74 /* Invalid / corrupt read */
75 if( fread( buf
, 1, fsize
, f
) != fsize
)
93 static char *vg_disk_load_text( const char *path
, i64
*size
)
98 if( (buf
= vg_disk_open_read( path
, 1, &fsize
)) )
109 static void *vg_asset_read_s( const char *path
, i64
*size
)
111 return vg_disk_open_read( path
, 0, size
);
114 static void *vg_asset_read( const char *path
)
117 return vg_disk_open_read( path
, 0, &size
);
120 static char *vg_textasset_read_s( const char *path
, i64
*size
)
122 return vg_disk_load_text( path
, size
);
125 static char *vg_textasset_read( const char *name
)
128 return vg_disk_load_text( name
, &size
);
131 static int vg_asset_write( const char *path
, void *data
, i64 size
)
133 FILE *f
= fopen( path
, "wb" );
136 fwrite( data
, size
, 1, f
);