bool cfg_to_string(int i/*setting_id*/, char* buf, int buf_len) { switch (settings[i].flags&F_T_MASK) { case F_T_CUSTOM: settings[i].custom_setting->write_to_cfg(settings[i].setting, buf, buf_len); break; case F_T_INT: case F_T_UINT: #ifdef HAVE_LCD_COLOR if (settings[i].flags&F_RGB) { int colour = *(int*)settings[i].setting; snprintf(buf,buf_len,"%02x%02x%02x", (int)RGB_UNPACK_RED(colour), (int)RGB_UNPACK_GREEN(colour), (int)RGB_UNPACK_BLUE(colour)); } else #endif if (settings[i].cfg_vals == NULL) { snprintf(buf,buf_len,"%d",*(int*)settings[i].setting); } else { if (cfg_int_to_string(i, *(int*)settings[i].setting, buf, buf_len) == false) { snprintf(buf,buf_len,"%d",*(int*)settings[i].setting); } else return false; } break; case F_T_BOOL: cfg_int_to_string(i, *(bool*)settings[i].setting==false?0:1, buf, buf_len); break; case F_T_CHARPTR: case F_T_UCHARPTR: if (((char*)settings[i].setting)[0] && settings[i].filename_setting->prefix) { snprintf(buf,buf_len,"%s%s%s", settings[i].filename_setting->prefix, (char*)settings[i].setting, settings[i].filename_setting->suffix); } else strlcpy(buf,(char*)settings[i].setting, settings[i].filename_setting->max_len); break; } /* switch () */ return true; }
const char *option_get_valuestring(const struct settings_list *setting, char *buffer, int buf_len, intptr_t temp_var) { const char* str = buffer; if ((setting->flags & F_BOOL_SETTING) == F_BOOL_SETTING) { bool val = (bool)temp_var; strlcpy(buffer, str(val? setting->bool_setting->lang_yes : setting->bool_setting->lang_no), buf_len); } #if 0 /* probably dont need this one */ else if ((setting->flags & F_FILENAME) == F_FILENAME) { struct filename_setting *info = setting->filename_setting; snprintf(buffer, buf_len, "%s%s%s", info->prefix, (char*)temp_var, info->suffix); } #endif else if (((setting->flags & F_INT_SETTING) == F_INT_SETTING) || ((setting->flags & F_TABLE_SETTING) == F_TABLE_SETTING)) { const struct int_setting *int_info = setting->int_setting; const struct table_setting *tbl_info = setting->table_setting; const char *unit; const char* (*formatter)(char*, size_t, int, const char*); if ((setting->flags & F_INT_SETTING) == F_INT_SETTING) { formatter = int_info->formatter; unit = unit_strings[int_info->unit]; } else { formatter = tbl_info->formatter; unit = unit_strings[tbl_info->unit]; } if (formatter) str = formatter(buffer, buf_len, (int)temp_var, unit); else snprintf(buffer, buf_len, "%d %s", (int)temp_var, unit?unit:""); } else if ((setting->flags & F_T_SOUND) == F_T_SOUND) { char sign = ' '; const char *unit = sound_unit(setting->sound_setting->setting); int val = sound_val2phys(setting->sound_setting->setting, (int)temp_var); if (sound_numdecimals(setting->sound_setting->setting)) { int integer, dec; if(val < 0) { sign = '-'; val = abs(val); } integer = val / 10; dec = val % 10; snprintf(buffer, buf_len, "%c%d.%d %s", sign, integer, dec, unit); } else snprintf(buffer, buf_len, "%d %s", val, unit); } else if ((setting->flags & F_CHOICE_SETTING) == F_CHOICE_SETTING) { if (setting->flags & F_CHOICETALKS) { int setting_id; const struct choice_setting *info = setting->choice_setting; if (info->talks[(int)temp_var] < LANG_LAST_INDEX_IN_ARRAY) { strlcpy(buffer, str(info->talks[(int)temp_var]), buf_len); } else { find_setting(setting->setting, &setting_id); cfg_int_to_string(setting_id, (int)temp_var, buffer, buf_len); } } else { int value = (int)temp_var; char *val = P2STR(setting->choice_setting->desc[value]); strlcpy(buffer, val, buf_len); } } return str; }
void settings_add_to_config(config_t *config) { int i; char value[256]; config_setting_t *root; config_setting_t *ps2; config_setting_t *group; config_setting_t *setting; if (config == NULL) { return; } root = config_root_setting(config); ps2 = config_setting_add(root,"PS2", CONFIG_TYPE_GROUP); { group = config_setting_add(ps2,"Home",CONFIG_TYPE_GROUP); { setting = config_setting_add(group,"Partition",CONFIG_TYPE_STRING); config_setting_set_string(setting,settings.home.partition); setting = config_setting_add(group,"Directory",CONFIG_TYPE_STRING); config_setting_set_string(setting,settings.home.directory); } group = config_setting_add(ps2,"Display", CONFIG_TYPE_GROUP); { setting = config_setting_add(group,"OffsetX",CONFIG_TYPE_STRING); cfg_int_to_string(value,settings.display.x); config_setting_set_string(setting,value); setting = config_setting_add(group,"OffsetY",CONFIG_TYPE_STRING); cfg_int_to_string(value,settings.display.y); config_setting_set_string(setting,value); setting = config_setting_add(group,"Mode",CONFIG_TYPE_STRING); cfg_int_to_string(value,settings.display.mode); config_setting_set_string(setting,value); setting = config_setting_add(group,"Interlace",CONFIG_TYPE_BOOL); config_setting_set_bool(setting,settings.display.interlace); } group = config_setting_add(ps2,"Sound",CONFIG_TYPE_GROUP); { setting = config_setting_add(group,"Stereo",CONFIG_TYPE_BOOL); config_setting_set_bool(setting,settings.sound.stereo); setting = config_setting_add(group,"Volume",CONFIG_TYPE_STRING); cfg_int_to_string(value,settings.sound.volume); config_setting_set_string(setting,value); } group = config_setting_add(ps2,"Font",CONFIG_TYPE_GROUP); { setting = config_setting_add(group,"Height",CONFIG_TYPE_STRING); cfg_int_to_string(value,settings.font.height); config_setting_set_string(setting,value); setting = config_setting_add(group,"Color",CONFIG_TYPE_ARRAY); for (i = 0; i < 4; i++) { cfg_int_to_string(value,settings.font.color[i]); config_setting_set_string_elem(setting,-1,value); } setting = config_setting_add(group,"Highlight",CONFIG_TYPE_ARRAY); for (i = 0; i < 4; i++) { cfg_int_to_string(value,settings.font.highlight[i]); config_setting_set_string_elem(setting,-1,value); } } group = config_setting_add(ps2,"Input",CONFIG_TYPE_GROUP); { setting = config_setting_add(group,"Port",CONFIG_TYPE_STRING); cfg_int_to_string(value,settings.input.port); config_setting_set_string(setting,value); setting = config_setting_add(group,"Slot",CONFIG_TYPE_STRING); cfg_int_to_string(value,settings.input.slot); config_setting_set_string(setting,value); setting = config_setting_add(group,"Confirm",CONFIG_TYPE_STRING); if (settings.input.confirm == PAD_CROSS) { config_setting_set_string(setting,"X"); } else { config_setting_set_string(setting,"O"); } } group = config_setting_add(ps2,"Devices",CONFIG_TYPE_GROUP); { setting = config_setting_add(group,"Mass",CONFIG_TYPE_BOOL); config_setting_set_bool(setting,settings.devices.mass); setting = config_setting_add(group,"HDD",CONFIG_TYPE_BOOL); config_setting_set_bool(setting,settings.devices.hdd); } } }