+#define VG_REQUIRED_ASSET( TYPE, DECL, FN, PATH, ... ) \
+ TYPE DECL = FN( PATH,##__VA_ARGS__ ); \
+ vg_required( DECL, "Resource is required but failed to load: '" PATH "'" );
+
+#if 0
+VG_DEPRECATED
+char *strcpy(char* destination, const char* source);
+VG_DEPRECATED
+char *strncpy(char *restrict dest, const char *restrict src, size_t n);
+VG_DEPRECATED
+char *strcat(char *restrict dest, const char *restrict src);
+VG_DEPRECATED
+char *strncat(char *restrict dest, const char *restrict src, size_t n);
+#endif
+
+#include <stdio.h>
+#include <dirent.h>
+#include <string.h>
+#include <stdarg.h>
+#include <ctype.h>
+#include <math.h>
+#include <assert.h>
+
+VG_STATIC int vg_thread_run( void *pfunc, void *data );
+VG_STATIC void vg_thread_exit(void);
+VG_STATIC void vg_set_thread_name( const char *name );
+VG_STATIC int vg_semaphore_init( vg_semaphore *sem, u32 value );
+VG_STATIC int vg_semaphore_trywait( vg_semaphore *sem );
+VG_STATIC int vg_semaphore_wait( vg_semaphore *sem );
+VG_STATIC int vg_semaphore_post( vg_semaphore *sem );
+VG_STATIC void vg_semaphore_free( vg_semaphore *sem );
+VG_STATIC int vg_mutex_init( vg_mutex *mutex );
+VG_STATIC int vg_mutex_lock( vg_mutex *mutex );
+VG_STATIC int vg_mutex_unlock( vg_mutex *mutex );
+VG_STATIC void vg_mutex_free( vg_mutex *mutex );
+VG_STATIC void vg_sleep_ms( long msec );
+VG_STATIC double vg_time_diff( vg_timespec start, vg_timespec end );
+
+#ifdef _WIN32_NO
+
+VG_STATIC int vg_thread_run( void *pfunc, void *data )