#ifndef CVAR_H #define CVAR_H /* 1.0.0 - Initial Implementation * 1.1.0 - Added Aliases * 1.2.0 - Added loading from file * 1.2.1 - Ported to its own output system * 1.3.0 - Added results for commands * 1.3.1 - Began changing the word "float" to the word "real" * 1.3.2 - Completely changed "float" to "real" * 1.3.3 - Added "forget" * 1.3.5 - Improved error reporting * 1.4.0 - Custom Types (BIG internal change!) * 1.4.1 - Readded getters/setters except alias for convenience * 1.5.0 - Rewrote the parser (another BIG internal change) * * TODO: * Linked variables (manually synchronized) * Type checking */ typedef enum { cvar_kNoError = 0, cvar_kSignatureError, cvar_kUnknownTypeError, cvar_kUnknownCommandError, cvar_kResultEnumEntries } cvar_result_e; typedef struct cvar_type_s cvar_type_t; typedef void (*cvar_dtor_f)(cvar_type_t* type, void* data); typedef cvar_result_e (*cvar_eval_f)(cvar_type_t* type, void* data, int argc, char** argv); typedef void (*cvar_view_f)(char* buffer, size_t len, cvar_type_t* type, void* data); struct cvar_type_s { size_t datasize; char* name; cvar_dtor_f dtor; cvar_eval_f eval; cvar_view_f view; }; typedef cvar_result_e (*cvar_cmd_f)(int argc, char** argv); typedef void (*cvar_print_f)(char* output); typedef struct cvar_s cvar_t; struct cvar_s { cvar_type_t* type; //cvar_type_e type_; // obsolete soon char* name; void* data; //cvar_val value; // obsolete soon cvar_t* next; }; // Initialization and Configuration void cvar_init(); void cvar_set_print(cvar_print_f func); void cvar_deinit(); // Type stuff cvar_type_t* cvar_type_new(char* name); void cvar_type_set_dtor(cvar_type_t* type, cvar_dtor_f dtor); void cvar_type_set_eval(cvar_type_t* type, cvar_eval_f eval); void cvar_type_set_memory(cvar_type_t* type, size_t size); // Default type callbacks void cvar_type_dtor_default(cvar_type_t* type, void* data); cvar_result_e cvar_type_eval_default(cvar_type_t* type, void* data, int argc, char** argv); void cvar_type_view_default(char* buffer, size_t len, cvar_type_t* type, void* data); void cvar_type_dtor_free_pointer_default(cvar_type_t* type, void* data); // Parser void cvar_evaluate(char* buffer); void cvar_load(char* file); // Cvars void* cvar_get_data(char* name); void cvar_set_cmd(char* name, cvar_cmd_f func); void cvar_set_int(char* name, int value); void cvar_set_real(char* name, double value); void cvar_set_string(char* name, char* value); //void cvar_set_alias(char* name, char* value); int cvar_get_int(char* name); double cvar_get_real(char* name); char* cvar_get_string(char* name); void cvar_forget_until(char* name); #endif