void emu_options::set_system_name(const char *name) { // remember the original system name std::string old_system_name(system_name()); // if the system name changed, fix up the device options if (old_system_name.compare(name)!=0) { // first set the new name astring error; set_value(OPTION_SYSTEMNAME, name, OPTION_PRIORITY_CMDLINE, error); assert(error.empty()); // remove any existing device options and then add them afresh remove_device_options(); if (add_slot_options(true)) while (add_slot_options(false)) { } // then add the options add_device_options(true); int num = 0; do { num = options_count(); update_slot_options(); } while(num != options_count()); } }
void emu_options::set_system_name(const char *name) { // remember the original system name astring old_system_name(system_name()); // if the system name changed, fix up the device options if (old_system_name != name) { // first set the new name astring error; set_value(OPTION_SYSTEMNAME, name, OPTION_PRIORITY_CMDLINE, error); assert(!error); // remove any existing device options remove_device_options(); bool isfirst = true; while (add_slot_options(isfirst)) { isfirst = false; } // then add the options add_device_options(true); update_slot_options(); while (add_slot_options(false)); add_device_options(true); } }
bool emu_options::parse_slot_devices(int argc, char *argv[], astring &error_string, const char *name, const char *value) { remove_device_options(); bool isfirst = true; bool result = core_options::parse_command_line(argc, argv, OPTION_PRIORITY_CMDLINE, error_string); while (add_slot_options(isfirst)) { result = core_options::parse_command_line(argc, argv, OPTION_PRIORITY_CMDLINE, error_string); isfirst = false; } add_device_options(true); if (name && exists(name)) { set_value(name, value, OPTION_PRIORITY_CMDLINE, error_string); } result = core_options::parse_command_line(argc, argv, OPTION_PRIORITY_CMDLINE, error_string); return result; }
bool emu_options::parse_command_line(int argc, char *argv[], astring &error_string) { // remember the original system name astring old_system_name(system_name()); // parse as normal bool result = core_options::parse_command_line(argc, argv, OPTION_PRIORITY_CMDLINE, error_string); // if the system name changed, fix up the device options if (old_system_name != system_name()) { // remove any existing device options remove_device_options(); result = parse_slot_devices(argc, argv, error_string, NULL, NULL); } return result; }
void emu_options::set_system_name(const char *name) { // remember the original system name std::string old_system_name(system_name()); bool new_system = old_system_name.compare(name)!=0; // if the system name changed, fix up the device options if (new_system) { // first set the new name std::string error; set_value(OPTION_SYSTEMNAME, name, OPTION_PRIORITY_CMDLINE, error); assert(error.empty()); // remove any existing device options remove_device_options(); } else { // revert device options set for the old software revert(OPTION_PRIORITY_SUBCMD, OPTION_PRIORITY_SUBCMD); } // get the new system const game_driver *cursystem = system(); if (cursystem == nullptr) return; if (*software_name() != 0) { std::string sw_load(software_name()); std::string sw_list, sw_name, sw_part, sw_instance, option_errors, error_string; int left = sw_load.find_first_of(':'); int middle = sw_load.find_first_of(':', left + 1); int right = sw_load.find_last_of(':'); sw_list = sw_load.substr(0, left - 1); sw_name = sw_load.substr(left + 1, middle - left - 1); sw_part = sw_load.substr(middle + 1, right - middle - 1); sw_instance = sw_load.substr(right + 1); sw_load.assign(sw_load.substr(0, right)); // look up the software part machine_config config(*cursystem, *this); software_list_device *swlist = software_list_device::find_by_name(config, sw_list.c_str()); software_info *swinfo = swlist != nullptr ? swlist->find(sw_name.c_str()) : nullptr; software_part *swpart = swinfo != nullptr ? swinfo->find_part(sw_part.c_str()) : nullptr; // then add the options if (new_system) { while (add_slot_options(swpart)) { } add_device_options(); } set_value(OPTION_SOFTWARENAME, sw_name.c_str(), OPTION_PRIORITY_CMDLINE, error_string); if (exists(sw_instance.c_str())) set_value(sw_instance.c_str(), sw_load.c_str(), OPTION_PRIORITY_SUBCMD, error_string); int num; do { num = options_count(); update_slot_options(swpart); } while(num != options_count()); } else if (new_system) { // add the options afresh while (add_slot_options()) { } add_device_options(); int num; do { num = options_count(); update_slot_options(); } while(num != options_count()); } }