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_warn
, stdout
, (KYEL
" warn" KWHT
"| " KYEL
) )
49 VG_LOGX( vg_error
, stderr
, (KRED
" error" KWHT
"| " KRED
) )
54 static i64
vg_file_size( FILE *fileptr
)
56 fseek( fileptr
, 0, SEEK_END
);
57 i64 fsize
= ftell( fileptr
);
58 fseek( fileptr
, 0, SEEK_SET
);
63 static void *vg_disk_open_read( const char *path
, int reserve_end
, i64
*size
)
65 FILE *f
= fopen( path
, "rb" );
68 i64 fsize
= vg_file_size( f
);
69 void *buf
= malloc( fsize
+ reserve_end
);
73 /* Invalid / corrupt read */
74 if( fread( buf
, 1, fsize
, f
) != fsize
)
92 static char *vg_disk_load_text( const char *path
, i64
*size
)
97 if( (buf
= vg_disk_open_read( path
, 1, &fsize
)) )
108 static void *vg_asset_read_s( const char *path
, i64
*size
)
110 return vg_disk_open_read( path
, 0, size
);
113 static void *vg_asset_read( const char *path
)
116 return vg_disk_open_read( path
, 0, &size
);
119 static char *vg_textasset_read_s( const char *path
, i64
*size
)
121 return vg_disk_load_text( path
, size
);
124 static char *vg_textasset_read( const char *name
)
127 return vg_disk_load_text( name
, &size
);
130 static int vg_asset_write( const char *path
, void *data
, i64 size
)
132 FILE *f
= fopen( path
, "wb" );
135 fwrite( data
, size
, 1, f
);