Пример #1
0
bool settings_load_config(const char* file, bool apply)
{
    int fd;
    char line[128];
    char* name;
    char* value;
    int i;
    fd = open_utf8(file, O_RDONLY);
    if (fd < 0)
        return false;

    while (read_line(fd, line, sizeof line) > 0)
    {
        if (!settings_parseline(line, &name, &value))
            continue;    
        for(i=0; i<nb_settings; i++)
        {
            if (settings[i].cfg_name == NULL)
                continue;
            if (!strcasecmp(name,settings[i].cfg_name))
            {
                switch (settings[i].flags&F_T_MASK)
                {
                    case F_T_CUSTOM:
                        settings[i].custom_setting->load_from_cfg(settings[i].setting, value);
                        break;
                    case F_T_INT:
                    case F_T_UINT:
#ifdef HAVE_LCD_COLOR
                        if (settings[i].flags&F_RGB)
                            hex_to_rgb(value, (int*)settings[i].setting);
                        else 
#endif 
                            if (settings[i].cfg_vals == NULL)
                        {
                            *(int*)settings[i].setting = atoi(value);
                        }
                        else
                        {
                            int temp, *v = (int*)settings[i].setting;
                            bool found = cfg_string_to_int(i, &temp, value);
                            if (found)
                            {
                                if (settings[i].flags&F_TABLE_SETTING)
                                    *v = settings[i].table_setting->values[temp];
                                else
                                    *v = temp;
                            }
                            else
                            {   /* atoi breaks choice settings because they
                                 * don't have int-like values, and would
                                 * fall back to the first value (i.e. 0)
                                 * due to atoi */
                                if (!(settings[i].flags&F_CHOICE_SETTING))
                                    *v = atoi(value);
                            }
                        }
                        break;
                    case F_T_BOOL:
                    {
                        int temp;
                        if (cfg_string_to_int(i,&temp,value))
                            *(bool*)settings[i].setting = (temp!=0);
                        if (settings[i].bool_setting->option_callback)
                            settings[i].bool_setting->option_callback(temp!=0);
                        break;
                    }
                    case F_T_CHARPTR:
                    case F_T_UCHARPTR:
                    {
                        char storage[MAX_PATH];
                        if (settings[i].filename_setting->prefix)
                        {
                            int len = strlen(settings[i].filename_setting->prefix);
                            if (!strncasecmp(value,
                                             settings[i].filename_setting->prefix,
                                             len))
                            {
                                strlcpy(storage, &value[len], MAX_PATH);
                            }
                            else strlcpy(storage, value, MAX_PATH);
                        }
                        else strlcpy(storage, value, MAX_PATH);
                        if (settings[i].filename_setting->suffix)
                        {
                            char *s = strcasestr(storage,settings[i].filename_setting->suffix);
                            if (s) *s = '\0';
                        }
                        strlcpy((char*)settings[i].setting, storage,
                                settings[i].filename_setting->max_len);
                        break;
                    }
                }
                break;
            } /* if (!strcmp(name,settings[i].cfg_name)) */
        } /* for(...) */
    } /* while(...) */

    close(fd);
    settings_save();
    if (apply)
        settings_apply(true);
    return true;
}
Пример #2
0
void settings_parse(config_t *config)
{

    int i = 0;

    const char ps2[4] = "PS2";

    char section_path[256];
    char setting[256];

    if (config == NULL)
    {
        return;
    }

    /// Home
    strcpy(section_path,ps2);
    strkat(section_path,".Home.");

    sprintf(setting,"%s%s",section_path,"Partition");
    strcpy(settings.home.partition,  cfg_get_string(setting,""));

    sprintf(setting,"%s%s",section_path,"Directory");
    strcpy(settings.home.directory,  cfg_get_string(setting,"mc0:/SYS-CONF"));


    /// Display
    strcpy(section_path,ps2);
    strkat(section_path,".Display.");

    sprintf(setting,"%s%s",section_path,"Mode");
    settings.display.mode = cfg_string_to_int(cfg_get_string(setting,"0"));
    printf("mode = %d\n",settings.display.mode);
    if (settings.display.mode == GRAPH_MODE_AUTO)
    {
        settings.display.mode = graph_get_region();
    }

    sprintf(setting,"%s%s",section_path,"Interlace");
    settings.display.interlace = cfg_get_bool(setting,0);

    sprintf(setting,"%s%s",section_path,"OffsetX");
    settings.display.x = cfg_string_to_int(cfg_get_string(setting,"0"));

    sprintf(setting,"%s%s",section_path,"OffsetY");
    settings.display.y = cfg_string_to_int(cfg_get_string(setting,"0"));

    /// Sound
    strcpy(section_path,ps2);
    strkat(section_path,".Sound.");

    sprintf(setting,"%s%s",section_path,"Stereo");
    settings.sound.stereo = cfg_get_bool(setting,1);

    sprintf(setting,"%s%s",section_path,"Volume");
    settings.sound.volume = cfg_string_to_int(cfg_get_string(setting,"100"));

    /// Font
    strcpy(section_path,ps2);
    strkat(section_path,".Font.");

    sprintf(setting,"%s%s",section_path,"Height");
    settings.font.height = cfg_string_to_int(cfg_get_string(setting,"16"));

    sprintf(setting,"%s%s",section_path,"Color");
    for (i = 0; i < 4; i++)
    {
        settings.font.color[i] = cfg_string_to_int(cfg_get_string_elem(setting,i,"128"));
    }

    sprintf(setting,"%s%s",section_path,"Highlight");
    for (i = 0; i < 4; i++)
    {
        settings.font.highlight[i] = cfg_string_to_int(cfg_get_string_elem(setting,i,"255"));
    }

    /// Input
    strcpy(section_path,ps2);
    strkat(section_path,".Input.");

    sprintf(setting,"%s%s",section_path,"Port");
    settings.input.port = cfg_string_to_int(cfg_get_string(setting,"0"));

    sprintf(setting,"%s%s",section_path,"Slot");
    settings.input.slot = cfg_string_to_int(cfg_get_string(setting,"0"));

    sprintf(setting,"%s%s",section_path,"Confirm");
    if (!strcmp("X",cfg_get_string(setting,"X")))
    {
        settings.input.confirm = PAD_CROSS;
    }
    else
    {
        settings.input.confirm = PAD_CIRCLE;
    }

    /// Devices
    strcpy(section_path,ps2);
    strkat(section_path,".Devices.");

    sprintf(setting,"%s%s",section_path,"Mass");
    settings.devices.mass = cfg_get_bool(setting,0);

    sprintf(setting,"%s%s",section_path,"HDD");
    settings.devices.hdd = cfg_get_bool(setting,0);

}