#include #include "state.h" #include "ini.h" // Running State // TODO // Persistent State void cart_info_done(cart_info* cart) { if (cart->file) fclose(cart->file); free(cart->filename); } void nese_state_done(nese_State* state) { cart_info_done(&state->cart); } static const ini_datum prefs_schema = { .type = ini_section, .name = "nese", .count = 2, .data = (ini_datum[]){ { .type = ini_section, .name = ".cart", .offset = offsetof(nese_State, cart), .count = 1, .data = (ini_datum[]){ { .type = ini_string, .name = "filename", .offset = offsetof(cart_info, filename), }, } }, { .type = ini_section, .name = ".flags", .offset = offsetof(nese_State, flags), .count = 1, .data = (ini_datum[]){ { .type = ini_flag, .name = "fullscreen", .shift = State_Bit_Fullscreen, }, } }, }, }; int save_prefs_file(const nese_State* state, FILE* file) { return write_ini_file(file, &prefs_schema, state); } int load_prefs_file(nese_State* state, FILE* file) { return read_ini_file(file, &prefs_schema, state); } int save_prefs_filename(const nese_State* state, const char* filename) { int status = -1; FILE* file = fopen(filename, "w"); if (NULL != file) { status = write_ini_file(file, &prefs_schema, state); fclose(file); } return status; } int load_prefs_filename(nese_State* state, const char* filename) { int status = -1; FILE* file = fopen(filename, "r"); if (NULL != file) { status = read_ini_file(file, &prefs_schema, state); fclose(file); } return status; }