71 lines
1.7 KiB
C
71 lines
1.7 KiB
C
#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
|