/* Parse the command line, looking for options */ static void surf_config_cmd_line(int *argc, char **argv) { int i, j; char *opt; for (i = 1; i < *argc; i++) { int remove_it = 0; if (!strncmp(argv[i], "--cfg=", strlen("--cfg="))) { opt = strchr(argv[i], '='); opt++; xbt_cfg_set_parse(_surf_cfg_set, opt); XBT_DEBUG("Did apply '%s' as config setting", opt); remove_it = 1; } else if (!strncmp(argv[i], "--cfg-help", strlen("--cfg-help") + 1) || !strncmp(argv[i], "--help", strlen("--help") + 1)) { printf ("Description of the configuration accepted by this simulator:\n"); xbt_cfg_help(_surf_cfg_set); printf ("\nYou can also use --help-models to see the details of all models known by this simulator.\n"); #ifdef HAVE_TRACING printf ("\nYou can also use --help-tracing to see the details of all tracing options known by this simulator.\n"); #endif exit(0); } else if (!strncmp (argv[i], "--help-models", strlen("--help-models") + 1)) { model_help("workstation", surf_workstation_model_description); model_help("CPU", surf_cpu_model_description); model_help("network", surf_network_model_description); exit(0); #ifdef HAVE_TRACING }else if (!strncmp (argv[i], "--help-tracing", strlen("--help-tracing") + 1)) { TRACE_help (1); exit(0); #endif } if (remove_it) { /*remove this from argv */ for (j = i + 1; j < *argc; j++) { argv[j - 1] = argv[j]; } argv[j - 1] = NULL; (*argc)--; i--; /* compensate effect of next loop incrementation */ } } }
DEFINE_MODEL_PROTOTYPE MODEL_interface * initialize_model () { MODEL_interface * mi = NULL; /*----- first, see if the user wants help -----*/ if( AFNI_yesenv("AFNI_MODEL_HELP_CONVDIFFGAM") || AFNI_yesenv("AFNI_MODEL_HELP_ALL") ) model_help(); /*----- allocate memory space for model interface -----*/ mi = (MODEL_interface *) XtMalloc (sizeof(MODEL_interface)); /*----- name of this model -----*/ strcpy (mi->label, "ConvDiffGam"); /*----- this is a signal model -----*/ mi->model_type = MODEL_SIGNAL_TYPE; /*----- number of parameters in the model -----*/ mi->params = 8; /*----- parameter labels -----*/ strcpy (mi->plabel[0], "A0"); strcpy (mi->plabel[1], "T0"); strcpy (mi->plabel[2], "E0"); strcpy (mi->plabel[3], "D0"); strcpy (mi->plabel[4], "A1"); strcpy (mi->plabel[5], "T1"); strcpy (mi->plabel[6], "E1"); strcpy (mi->plabel[7], "D1"); /*----- minimum and maximum parameter constraints -----*/ mi->min_constr[0] = 0.0; mi->max_constr[0] = 10.0; mi->min_constr[1] = 0.0; mi->max_constr[1] = 10.0; mi->min_constr[2] = 0.0; mi->max_constr[2] = 10.0; mi->min_constr[3] = 0.0; mi->max_constr[3] = 10.0; mi->min_constr[4] = 0.0; mi->max_constr[4] = 10.0; mi->min_constr[5] = 0.0; mi->max_constr[5] = 10.0; mi->min_constr[6] = 0.0; mi->max_constr[6] = 10.0; mi->min_constr[7] = 0.0; mi->max_constr[7] = 10.0; /*----- function which implements the model -----*/ mi->call_func = conv_model; return (mi); }
/* callback of the cpu/model variable */ static void _sg_cfg_cb__storage_mode(const char *name) { xbt_assert(_sg_cfg_init_status < 2, "Cannot change the model after the initialization"); char *val = xbt_cfg_get_string(name); if (!strcmp(val, "help")) { model_help("storage", surf_storage_model_description); sg_cfg_exit_early(); } find_model_description(surf_storage_model_description, val); }
/* callback of the network_model variable */ static void _sg_cfg_cb__network_model(const char *name) { xbt_assert(_sg_cfg_init_status < 2, "Cannot change the model after the initialization"); char *val = xbt_cfg_get_string(name); if (!strcmp(val, "help")) { model_help("network", surf_network_model_description); sg_cfg_exit_early(); } /* New Module missing */ find_model_description(surf_network_model_description, val); }
/* callback of the vm/model variable */ static void _sg_cfg_cb__vm_model(const char *name) { xbt_assert(_sg_cfg_init_status < 2, "Cannot change the model after the initialization"); char *val = xbt_cfg_get_string(name); if (!strcmp(val, "help")) { model_help("vm", surf_vm_model_description); sg_cfg_exit_early(); } /* Make sure that the model exists */ find_model_description(surf_vm_model_description, val); }
int model_execute(int argc, char* const argv[]) { try { po::variables_map vm; // it contains everything if(int error = model_help(argc, argv, vm)) return error; model_content(vm); // execute the miniapp } catch(std::exception& e){ std::cout << e.what() << "\n"; return mapp::MAPP_UNKNOWN_ERROR; } return mapp::MAPP_OK; // 0 ok, 1 not ok }
/* callback of the plugin variable */ static void _sg_cfg_cb__plugin(const char *name) { xbt_assert(_sg_cfg_init_status < 2, "Cannot load a plugin after the initialization"); char *val = xbt_cfg_get_string(name); if (val==nullptr || val[0] == '\0') return; if (!strcmp(val, "help")) { model_help("plugin", surf_plugin_description); sg_cfg_exit_early(); } int plugin_id = find_model_description(surf_plugin_description, val); surf_plugin_description[plugin_id].model_init_preparse(); }
/* callback of the cpu/model variable */ static void _sg_cfg_cb__storage_mode(const char *name, int pos) { char *val; xbt_assert(_sg_cfg_init_status < 2, "Cannot change the model after the initialization"); val = xbt_cfg_get_string(_sg_cfg_set, name); if (!strcmp(val, "help")) { model_help("storage", surf_storage_model_description); sg_cfg_exit_early(); } /* New Module missing */ find_model_description(surf_storage_model_description, val); }
/* callback of the workstation_model variable */ static void _sg_cfg_cb__network_model(const char *name, int pos) { char *val; xbt_assert(_sg_init_status == 1, "Cannot change the model after the initialization"); val = xbt_cfg_get_string(_sg_cfg_set, name); if (!strcmp(val, "help")) { model_help("network", surf_network_model_description); exit(0); } /* New Module missing */ find_model_description(surf_network_model_description, val); }
/* callback of the workstation/model variable */ static void _sg_cfg_cb__workstation_model(const char *name, int pos) { char *val; xbt_assert(_sg_init_status == 1, "Cannot change the model after the initialization"); val = xbt_cfg_get_string(_sg_cfg_set, name); if (!strcmp(val, "help")) { model_help("workstation", surf_workstation_model_description); exit(0); } /* Make sure that the model exists */ find_model_description(surf_workstation_model_description, val); }
/* callback of the plugin variable */ static void _sg_cfg_cb__plugin(const char *name, int pos) { char *val; XBT_VERB("PLUGIN"); xbt_assert(_sg_cfg_init_status < 2, "Cannot load a plugin after the initialization"); val = xbt_cfg_get_string(_sg_cfg_set, name); if (!strcmp(val, "help")) { model_help("plugin", surf_plugin_description); sg_cfg_exit_early(); } /* New Module missing */ int plugin_id = find_model_description(surf_plugin_description, val); surf_plugin_description[plugin_id].model_init_preparse(); }
/* Parse the command line, looking for options */ static void sg_config_cmd_line(int *argc, char **argv) { int shall_exit = 0; int i, j; char *opt; for (j = i = 1; i < *argc; i++) { if (!strncmp(argv[i], "--cfg=", strlen("--cfg="))) { opt = strchr(argv[i], '='); opt++; xbt_cfg_set_parse(_sg_cfg_set, opt); XBT_DEBUG("Did apply '%s' as config setting", opt); } else if (!strcmp(argv[i], "--version")) { printf("%s\n", SIMGRID_VERSION_STRING); shall_exit = 1; } else if (!strcmp(argv[i], "--cfg-help") || !strcmp(argv[i], "--help")) { printf ("Description of the configuration accepted by this simulator:\n"); xbt_cfg_help(_sg_cfg_set); printf( "\n" "Each of these configurations can be used by adding\n" " --cfg=<option name>:<option value>\n" "to the command line.\n" "\n" "You can also use --help-models to see the details of all models known by this simulator.\n" "\n" "You can also use --help-tracing to see the details of all tracing options known by this simulator.\n" "\n" "You can also use --help-logs and --help-log-categories to see the details of logging output.\n" "\n" "You can also use --version to get SimGrid version information.\n" "\n" ); shall_exit = 1; } else if (!strcmp(argv[i], "--help-models")) { int k; model_help("host", surf_host_model_description); printf("\n"); model_help("CPU", surf_cpu_model_description); printf("\n"); model_help("network", surf_network_model_description); printf("\nLong description of all optimization levels accepted by the models of this simulator:\n"); for (k = 0; surf_optimization_mode_description[k].name; k++) printf(" %s: %s\n", surf_optimization_mode_description[k].name, surf_optimization_mode_description[k].description); printf("Both network and CPU models have 'Lazy' as default optimization level\n\n"); shall_exit = 1; } else if (!strcmp(argv[i], "--help-tracing")) { TRACE_help (1); shall_exit = 1; } else { argv[j++] = argv[i]; } } if (j < *argc) { argv[j] = NULL; *argc = j; } if (shall_exit) sg_cfg_exit_early(); }