#ifndef RESOURCE_H #define RESOURCE_H #include "sys.h" #define RESOURCE_NAME_LEN_MAX 255 /* A resource contains data that can be retrieved globally by name. * If enabled during compilation, resource data is embedded in the * executable. Otherwise each resource represents a file on disk. */ struct resource { struct string _data; b32 _exists; #if RESOURCES_EMBEDDED struct string _name; #else struct sys_file _file; struct sys_file_map _file_map; u8 _name_text[RESOURCE_NAME_LEN_MAX]; u8 _name_len; #endif }; /* ========================== * * Startup * ========================== */ struct resource_startup_receipt { i32 _; }; struct resource_startup_receipt resource_startup(void); /* ========================== * * Open / close * ========================== */ struct resource resource_open(struct string name); #if RESOURCES_EMBEDDED #define resource_close(res_ptr) #else void resource_close(struct resource *res_ptr); #endif /* ========================== * * Data * ========================== */ #define resource_get_data(res_ptr) (res_ptr)->_data #define resource_exists(res_ptr) (res_ptr)->_exists #if RESOURCES_EMBEDDED #define resource_get_name(res_ptr) (res_ptr)->_name #else #define resource_get_name(res_ptr) STRING((res_ptr)->_name_len, (res_ptr)->_name_text) #endif /* ========================== * * Watch * ========================== */ #define RESOURCE_WATCH_CALLBACK_FUNC_DEF(func_name, arg_name) void func_name(struct string arg_name) typedef RESOURCE_WATCH_CALLBACK_FUNC_DEF(resource_watch_callback, name); #if RESOURCE_RELOADING void resource_register_watch_callback(resource_watch_callback *callback); #else #define resource_register_watch_callback(callback) #endif #endif