This example demonstrates how the library can be used to parse command line options and to load and save them to configuration files.
static int w;
static int
callback (
sc_options_t * opt,
const char *theoptarg,
void *data)
{
if (theoptarg == NULL) {
SC_GLOBAL_INFOF ("%s without argument\n", (const char *) data);
}
else {
SC_GLOBAL_INFOF ("%s with %s\n", (const char *) data, theoptarg);
}
++w;
return 0;
}
int
main (int argc, char **argv)
{
int mpiret, retval;
int rank;
int first_arg;
int i1, i2, si1;
int kvint, deep;
size_t z;
double d, sd;
const char *s1, *s2, *ss1, *ss2;
const char *cd = "Callback example";
SC_CHECK_MPI (mpiret);
SC_CHECK_MPI (mpiret);
"Callback 1");
"Callback 2");
"Size_t");
"Subset string 1");
keyvalue, "Subset keyvalue number");
"sc_options_preload.ini")) {
SC_GLOBAL_INFO ("Preload successful\n");
}
else {
SC_GLOBAL_INFO ("Preload not found or failed\n");
}
if (first_arg < 0) {
"Usage for arg 1\nand for arg 2");
SC_GLOBAL_INFO ("Option parsing failed\n");
}
else {
SC_GLOBAL_INFO ("Option parsing successful\n");
SC_GLOBAL_INFOF ("Keyvalue number is now %d\n", kvint);
if (rank == 0) {
if (retval) {
SC_GLOBAL_INFO ("Option file output failed\n");
}
else {
"output.ini");
if (retval) {
SC_GLOBAL_INFO ("Argument file input failed\n");
}
else {
SC_GLOBAL_INFO ("Argument save load successful\n");
}
}
}
}
SC_CHECK_MPI (mpiret);
return 0;
}
#define SC_LP_DEFAULT
Selects the SC default threshold.
Definition: sc.h:404
#define SC_LP_INFO
Most relevant things a function is doing.
Definition: sc.h:409
void sc_finalize(void)
Unregisters all packages, runs the memory check, removes the signal handlers and resets sc_identifier...
void sc_init(sc_MPI_Comm mpicomm, int catch_signals, int print_backtrace, sc_log_handler_t log_handler, int log_threshold)
Sets the global program identifier (e.g.
int sc_package_id
libsc allows for multiple packages to use their own log priorities etc.
void sc_keyvalue_set_int(sc_keyvalue_t *kv, const char *key, int newvalue)
Routine to set an integer value for a given key.
struct sc_keyvalue sc_keyvalue_t
The key-value container is an opaque structure.
Definition: sc_keyvalue.h:47
sc_keyvalue_t * sc_keyvalue_new()
Create a new key-value container.
void sc_keyvalue_destroy(sc_keyvalue_t *kv)
Free a key-value container and all internal memory for key storage.
int sc_MPI_Finalize(void)
MPI finalization.
int sc_MPI_Comm_rank(sc_MPI_Comm mpicomm, int *mpirank)
Query rank of an MPI process within a communicator.
int sc_MPI_Init(int *argc, char ***argv)
MPI initialization.
#define sc_MPI_COMM_WORLD
Emulate the world communicator.
Definition: sc_mpi.h:328
Register and parse command line options and read/write configuration files.
void sc_options_add_switch(sc_options_t *opt, int opt_char, const char *opt_name, int *variable, const char *help_string)
Add a switch option.
void sc_options_add_size_t(sc_options_t *opt, int opt_char, const char *opt_name, size_t *variable, size_t init_value, const char *help_string)
Add an option that takes a size_t argument.
void sc_options_print_usage(int package_id, int log_priority, sc_options_t *opt, const char *arg_usage)
Print a usage message.
void sc_options_add_callback(sc_options_t *opt, int opt_char, const char *opt_name, int has_arg, sc_options_callback_t fn, void *data, const char *help_string)
Add an option that calls a user-defined function when parsed.
sc_options_t * sc_options_new(const char *program_path)
Create an empty options structure.
int sc_options_save(int package_id, int err_priority, sc_options_t *opt, const char *inifile)
Save all options and arguments to a file in .ini format.
void sc_options_add_keyvalue(sc_options_t *opt, int opt_char, const char *opt_name, int *variable, const char *init_value, sc_keyvalue_t *keyvalue, const char *help_string)
Add an option that takes string keys into a lookup table of integers.
void sc_options_print_summary(int package_id, int log_priority, sc_options_t *opt)
Print a summary of all option values.
int sc_options_load_args(int package_id, int err_priority, sc_options_t *opt, const char *inifile)
Load a file in .ini format and update entries found under [Arguments].
void sc_options_add_int(sc_options_t *opt, int opt_char, const char *opt_name, int *variable, int init_value, const char *help_string)
Add an option that takes an integer argument.
void sc_options_destroy(sc_options_t *opt)
Destroy the options structure.
void sc_options_add_inifile(sc_options_t *opt, int opt_char, const char *opt_name, const char *help_string)
Add an option to read in a file in .ini format.
struct sc_options sc_options_t
The options data structure is opaque.
Definition: sc_options.h:88
void sc_options_add_string(sc_options_t *opt, int opt_char, const char *opt_name, const char **variable, const char *init_value, const char *help_string)
Add a string option.
void sc_options_add_double(sc_options_t *opt, int opt_char, const char *opt_name, double *variable, double init_value, const char *help_string)
Add an option that takes a double argument.
int sc_options_load(int package_id, int err_priority, sc_options_t *opt, const char *file)
Load a file in the default format and update option values.
void sc_options_add_suboptions(sc_options_t *opt, sc_options_t *subopt, const char *prefix)
Copy one set of options to another as a subset, with a prefix.
int sc_options_parse(int package_id, int err_priority, sc_options_t *opt, int argc, char **argv)
Parse command line options.
void sc_options_add_jsonfile(sc_options_t *opt, int opt_char, const char *opt_name, const char *help_string)
Add an option to read in a file in JSON format.