This example demonstrates how the library can be used to parse command line options and to load and save them to configuration files.
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:403
#define SC_LP_INFO
Most relevant things a function is doing.
Definition: sc.h:408
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:327
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.
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.
sc_options_t * sc_options_new(const char *program_path)
Create an empty options structure.
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.