power_play/src/resource.h

52 lines
1.4 KiB
C

#ifndef RESOURCE_H
#define RESOURCE_H
#include "sys.h"
/* 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;
#if RESOURCES_EMBEDDED
struct string _file_name;
#else
struct sys_file _file;
struct sys_file_map _file_map;
u8 _file_name_text[256];
u8 _file_name_len;
#endif
};
struct resource_startup_receipt { i32 _; };
struct resource_startup_receipt resource_startup(void);
struct resource resource_open(struct string path);
#if RESOURCES_EMBEDDED
#define resource_close(res_ptr)
#else
void resource_close(struct resource *res_ptr);
#endif
b32 resource_exists(struct string path);
#define resource_get_data(res_ptr) (res_ptr)->_data
#if RESOURCES_EMBEDDED
#define resource_get_name(res_ptr) (res_ptr)->_file_name
#else
#define resource_get_name(res_ptr) STRING((res_ptr)->_file_name_len, (res_ptr)->_file_name_text)
#endif
#define RESOURCE_WATCH_CALLBACK_FUNC_DEF(func_name, arg_info) void func_name(struct sys_watch_info *arg_info)
typedef RESOURCE_WATCH_CALLBACK_FUNC_DEF(resource_watch_callback, info);
#if RESOURCE_RELOADING
void resource_register_watch_callback(resource_watch_callback *callback);
#else
#define resource_register_watch_callback(callback)
#endif
#endif