rendered paste body#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 Configurationvoid cvar_init();void cvar_set_print(cvar_print_f func);void cvar_deinit();// Type stuffcvar_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 callbacksvoid 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);// Parservoid cvar_evaluate(char* buffer);void cvar_load(char* file);// Cvarsvoid* 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