static void ParseSettingLine(std::string &linebuf, bool IsOverrideSetting = false) { MDFNCS *zesetting; size_t spacepos = linebuf.find(' '); // EOF or bad line if(spacepos == std::string::npos) return; // No name(key) if(spacepos == 0) return; // No value if((spacepos + 1) == linebuf.size()) return; // Comment if(linebuf[0] == ';') return; linebuf[spacepos] = 0; zesetting = FindSetting(linebuf.c_str(), true, true); if(zesetting) { char *nv = strdup(linebuf.c_str() + spacepos + 1); if(IsOverrideSetting) { if(zesetting->game_override) free(zesetting->game_override); zesetting->game_override = nv; } else { if(zesetting->value) free(zesetting->value); zesetting->value = nv; } ValidateSetting(nv, zesetting->desc); // TODO: Validate later(so command line options can override invalid setting file data correctly) } else if(!IsOverrideSetting) { UnknownSetting_t unks; unks.name = strdup(linebuf.c_str()); unks.value = strdup(linebuf.c_str() + spacepos + 1); UnknownSettings.push_back(unks); } }
bool MDFNI_SetSetting(const char *name, const char *value, bool NetplayOverride) { MDFNCS *zesetting = FindSetting(name, true, true); if(zesetting) { if(!ValidateSetting(value, zesetting->desc)) { return(0); } // TODO: When NetplayOverride is set, make sure the setting is an emulation-related setting, // and that it is safe to change it(changing paths to BIOSes and such is not safe :b). if(NetplayOverride) { if(zesetting->netplay_override) free(zesetting->netplay_override); zesetting->netplay_override = strdup(value); } else { if(zesetting->value) free(zesetting->value); zesetting->value = strdup(value); } // TODO, always call driver notification function, regardless of whether a game is loaded. if(zesetting->ChangeNotification) { if(MDFNGameInfo) zesetting->ChangeNotification(name); } return(true); } else { MDFN_PrintError(_("Unknown setting \"%s\""), name); return(false); } }
bool MFDN_LoadSettings(const char *basedir) { FILE *fp; fname = basedir; fname += PSS; fname += "mednafen-09x.cfg"; MDFN_printf(_("Loading settings from \"%s\"..."), fname.c_str()); //printf("%s\n", fname.c_str()); if(!(fp = fopen(fname.c_str(), "rb"))) { ErrnoHolder ene(errno); MDFN_printf(_("Failed: %s\n"), ene.StrError()); if(ene.Errno() == ENOENT) // Don't return failure if the file simply doesn't exist. return(1); else return(0); } MDFN_printf("\n"); char linebuf[1024]; while(fgets(linebuf, 1024, fp) > 0) { MDFNCS *zesetting; char *spacepos = strchr(linebuf, ' '); if(!spacepos) continue; // EOF or bad line if(spacepos == linebuf) continue; // No name(key) if(spacepos[1] == 0) continue; // No value if(spacepos[0] == ';') continue; // Comment // FIXME if(linebuf[0] == ';') continue; *spacepos = 0; char *lfpos = strchr(spacepos + 1, '\n'); if(lfpos) *lfpos = 0; lfpos = strchr(spacepos + 1, '\r'); if(lfpos) *lfpos = 0; if(spacepos[1] == 0) continue; // No value zesetting = FindSetting(linebuf, true, true); if(zesetting) { if(zesetting->value) free(zesetting->value); zesetting->value = strdup(spacepos + 1); if(!ValidateSetting(zesetting->value, zesetting->desc)) return(0); } else { UnknownSetting_t unks; unks.name = strdup(linebuf); unks.value = strdup(spacepos + 1); UnknownSettings.push_back(unks); } } fclose(fp); return(1); }
static void ParseSettingLine(std::string &linebuf, size_t* valid_count, size_t* unknown_count, bool IsOverrideSetting = false) { MDFNCS *zesetting; size_t spacepos; // // Comment // if(linebuf[0] == ';' || linebuf[0] == '#') return; spacepos = linebuf.find(' '); // No name(key) if(spacepos == 0) return; // No space present?! if(spacepos == std::string::npos) { //if(linebuf.size() != 0) // spacepos = linebuf.size() - 1; //else return; } else linebuf[spacepos] = 0; zesetting = FindSetting(linebuf.c_str(), true, true); if(zesetting) { char *nv = strdup(linebuf.c_str() + spacepos + 1); if(IsOverrideSetting) { if(zesetting->game_override) free(zesetting->game_override); zesetting->game_override = nv; } else { if(zesetting->value) free(zesetting->value); zesetting->value = nv; } ValidateSetting(nv, zesetting->desc); // TODO: Validate later(so command line options can override invalid setting file data correctly) (*valid_count)++; } else { if(!IsOverrideSetting) { UnknownSetting_t unks; unks.name = strdup(linebuf.c_str()); unks.value = strdup(linebuf.c_str() + spacepos + 1); UnknownSettings.push_back(unks); } (*unknown_count)++; } }