#ifndef cfgparse_h #define cfgparse_h #include "memory.h" typedef enum { cfg_type_int, cfg_type_string, cfg_type_data, cfg_type_none } cfg_Type; typedef struct { int size; char* data; } cfg_Data; typedef struct cfg_Prop { char name[28]; cfg_Type type; union { int num; cfg_Data data; char* str; } as; struct cfg_Prop* next; } cfg_Prop; typedef struct cfg_Object { char name[28]; int prop_count; cfg_Prop* props; struct cfg_Object* next; } cfg_Object; cfg_Object* cfg_parse(const char* src, Arena* arena); const cfg_Prop* find_prop( const cfg_Object* obj, const char* name ); const cfg_Prop* find_prop_of( const cfg_Object* obj, const char* name, cfg_Type type ); int find_int_default( const cfg_Object* obj, const char* name, int def ); const char* find_string_default( const cfg_Object* obj, const char* name, const char* def ); #endif