void options_init(const options_entry *entrylist) { /* free anything we currently have */ options_free_entries(); datalist_nextptr = &datalist; /* add core options and optionally add options that are passed to us */ options_add_entries(core_options); if (entrylist != NULL) options_add_entries(entrylist); }
core_options *mame_options_init(const options_entry *entries) { /* create MAME core options */ core_options *opts = options_create(memory_error); /* set up output callbacks */ options_set_output_callback(opts, OPTMSG_INFO, mame_puts_info); options_set_output_callback(opts, OPTMSG_WARNING, mame_puts_warning); options_set_output_callback(opts, OPTMSG_ERROR, mame_puts_error); options_add_entries(opts, mame_core_options); if (entries != NULL) options_add_entries(opts, entries); /* we need to dynamically add options when the device name is parsed */ options_set_option_callback(opts, OPTION_GAMENAME, image_driver_name_callback); return opts; }
void image_add_device_options(core_options *opts, const game_driver *driver) { int index = 0; machine_config *config; const device_config_image_interface *image = NULL; /* create the configuration */ config = global_alloc(machine_config(driver->machine_config)); /* enumerate our callback for every device */ /* loop on each device instance */ for (bool gotone = config->m_devicelist.first(image); gotone; gotone = image->next(image)) { options_entry entry[2]; astring dev_full_name; /* first device? add the header as to be pretty */ if (index == 0) { memset(entry, 0, sizeof(entry)); entry[0].description = "IMAGE DEVICES"; entry[0].flags = OPTION_HEADER; options_add_entries(opts, entry); } /* retrieve info about the device instance */ dev_full_name.printf("%s;%s", image->instance_name(), image->brief_instance_name()); /* add the option */ memset(entry, 0, sizeof(entry)); entry[0].name = dev_full_name; options_add_entries(opts, entry); index++; } /* record that we've added device options */ options_set_bool(opts, OPTION_ADDED_DEVICE_OPTIONS, TRUE, OPTION_PRIORITY_CMDLINE); /* free the configuration */ global_free(config); }
core_options *mame_options_init(const options_entry *entries) { /* create MAME core options */ core_options *opts = options_create(memory_error); /* set up output callbacks */ options_set_output_callback(opts, OPTMSG_INFO, mame_puts_info); options_set_output_callback(opts, OPTMSG_WARNING, mame_puts_warning); options_set_output_callback(opts, OPTMSG_ERROR, mame_puts_error); options_add_entries(opts, mame_core_options); if (entries != NULL) options_add_entries(opts, entries); #ifdef MESS mess_options_init(opts); #endif /* MESS */ return opts; }
int CLIB_DECL main(int argc, char *argv[]) { int result = -1; clock_t begin_time; double elapsed_time; core_options *messtest_options = NULL; test_count = 0; failure_count = 0; messtest_options = NULL; /* register options */ messtest_options = options_create(messtest_fail); options_add_entries(messtest_options, messtest_option_entries); options_set_option_callback(messtest_options, OPTION_GAMENAME, handle_arg); /* run MAME's validity checks; if these fail cop out now */ /* NPW 16-Sep-2006 - commenting this out because this cannot be run outside of MAME */ //if (mame_validitychecks(-1)) // goto done; /* run Imgtool's validity checks; if these fail cop out now */ if (imgtool_validitychecks()) goto done; begin_time = clock(); /* parse the commandline */ if (options_parse_command_line(messtest_options, argc, argv, OPTION_PRIORITY_CMDLINE,TRUE)) { fprintf(stderr, "Error while parsing cmdline\n"); goto done; } if (test_count > 0) { elapsed_time = ((double) (clock() - begin_time)) / CLOCKS_PER_SEC; fprintf(stderr, "Tests complete; %i test(s), %i failure(s), elapsed time %.2f\n", test_count, failure_count, elapsed_time); } else { fprintf(stderr, "Usage: %s [test1] [test2]...\n", argv[0]); } result = failure_count; done: if (messtest_options) options_free(messtest_options); return result; }
int cli_execute(int argc, char **argv, const options_entry *osd_options) { core_options *options; astring *gamename = astring_alloc(); astring *exename = astring_alloc(); const char *gamename_option; const game_driver *driver; int result; /* initialize the options manager and add the CLI-specific options */ options = mame_options_init(osd_options); options_add_entries(options, cli_options); /* parse the command line first; if we fail here, we're screwed */ if (options_parse_command_line(options, argc, argv, OPTION_PRIORITY_CMDLINE)) { result = MAMERR_INVALID_CONFIG; goto error; } /* parse the simple commmands before we go any further */ core_filename_extract_base(exename, argv[0], TRUE); result = execute_simple_commands(options, astring_c(exename)); if (result != -1) { goto error; } /* find out what game we might be referring to */ gamename_option = options_get_string(options, OPTION_GAMENAME); core_filename_extract_base(gamename, gamename_option, TRUE); driver = driver_get_name(astring_c(gamename)); /* execute any commands specified */ result = execute_commands(options, astring_c(exename), driver); if (result != -1) { goto error; } /* if we don't have a valid driver selected, offer some suggestions */ if (strlen(gamename_option) > 0 && driver == NULL) { const game_driver *matches[10]; int drvnum; /* get the top 10 approximate matches */ driver_list_get_approx_matches(drivers, gamename_option, ARRAY_LENGTH(matches), matches); /* print them out */ fprintf(stderr, "\n\"%s\" approximately matches the following\n" "supported " GAMESNOUN " (best match first):\n\n", gamename_option); for (drvnum = 0; drvnum < ARRAY_LENGTH(matches); drvnum++) if (matches[drvnum] != NULL) fprintf(stderr, "%-10s%s\n", matches[drvnum]->name, matches[drvnum]->description); /* exit with an error */ result = MAMERR_NO_SUCH_GAME; goto error; } /* run the game */ result = mame_execute(options); error: /* free our options and exit */ options_free(options); astring_free(gamename); astring_free(exename); return result; }
int cli_execute(int argc, char **argv, const options_entry *osd_options) { core_options *options = NULL; const char *gamename_option; const game_driver *driver; int result = MAMERR_FATALERROR; astring gamename; astring exename; try { /* initialize the options manager and add the CLI-specific options */ options = mame_options_init(osd_options); options_add_entries(options, cli_options); /* parse the command line first; if we fail here, we're screwed */ if (options_parse_command_line(options, argc, argv, OPTION_PRIORITY_CMDLINE)) { result = MAMERR_INVALID_CONFIG; goto error; } /* parse the simple commmands before we go any further */ core_filename_extract_base(&exename, argv[0], TRUE); result = execute_simple_commands(options, exename); if (result != -1) goto error; /* find out what game we might be referring to */ gamename_option = options_get_string(options, OPTION_GAMENAME); core_filename_extract_base(&gamename, gamename_option, TRUE); driver = driver_get_name(gamename); /* execute any commands specified */ result = execute_commands(options, exename, driver); if (result != -1) goto error; /* if we don't have a valid driver selected, offer some suggestions */ if (strlen(gamename_option) > 0 && driver == NULL) { const game_driver *matches[10]; int drvnum; /* get the top 10 approximate matches */ driver_list_get_approx_matches(drivers, gamename_option, ARRAY_LENGTH(matches), matches); /* print them out */ fprintf(stderr, "\n\"%s\" approximately matches the following\n" "supported " GAMESNOUN " (best match first):\n\n", gamename_option); for (drvnum = 0; drvnum < ARRAY_LENGTH(matches); drvnum++) if (matches[drvnum] != NULL) fprintf(stderr, "%-18s%s\n", matches[drvnum]->name, matches[drvnum]->description); /* exit with an error */ result = MAMERR_NO_SUCH_GAME; goto error; } /* run the game */ result = mame_execute(options); } catch (emu_fatalerror &fatal) { fprintf(stderr, "%s\n", fatal.string()); if (fatal.exitcode() != 0) result = fatal.exitcode(); } catch (emu_exception &) { fprintf(stderr, "Caught unhandled emulator exception\n"); } catch (std::bad_alloc &) { fprintf(stderr, "Out of memory!\n"); } catch (...) { fprintf(stderr, "Caught unhandled exception\n"); } error: /* free our options and exit */ if (options != NULL) options_free(options); /* report any unfreed memory */ dump_unfreed_mem(); return result; }