X-Git-Url: https://git.sesse.net/?p=cubemap;a=blobdiff_plain;f=parse.cpp;h=d8706d3e4ec65ca999f505420c032cd57af139a7;hp=fca90a6d29b3397a42ad58a1babc25377e3eb8cd;hb=e1722a5c0341fd541ce57f1eed4dc76cbd3efe07;hpb=c2c9f6441f9ae8091a39aea0340417d5915e1ac9 diff --git a/parse.cpp b/parse.cpp index fca90a6..d8706d3 100644 --- a/parse.cpp +++ b/parse.cpp @@ -113,8 +113,35 @@ vector parse_config(const string &filename) return ret; } -int fetch_config_int(const vector &config, const string &keyword, int min_limit, int max_limit) +string fetch_config_string(const vector &config, const string &keyword, + ParameterType parameter_type, const string &default_value) { + assert(parameter_type == PARAMATER_MANDATORY || parameter_type == PARAMETER_OPTIONAL); + for (unsigned i = 0; i < config.size(); ++i) { + if (config[i].keyword != keyword) { + continue; + } + if (config[i].parameters.size() > 0 || + config[i].arguments.size() != 1) { + fprintf(stderr, "ERROR: '%s' takes one argument and no parameters\n", keyword.c_str()); + exit(1); + } + return config[i].arguments[0]; + } + if (parameter_type == PARAMATER_MANDATORY) { + fprintf(stderr, "ERROR: Missing '%s' statement in config file.\n", + keyword.c_str()); + exit(1); + } else { + return default_value; + } +} + +int fetch_config_int(const std::vector &config, const std::string &keyword, + int min_limit, int max_limit, + ParameterType parameter_type, int default_value) +{ + assert(parameter_type == PARAMATER_MANDATORY || parameter_type == PARAMETER_OPTIONAL); bool value_found = false; int value = -1; for (unsigned i = 0; i < config.size(); ++i) { @@ -130,6 +157,9 @@ int fetch_config_int(const vector &config, const string &keyword, in value = atoi(config[i].arguments[0].c_str()); // TODO: verify int validity. } if (!value_found) { + if (parameter_type == PARAMETER_OPTIONAL) { + return default_value; + } fprintf(stderr, "ERROR: Missing '%s' statement in config file.\n", keyword.c_str()); exit(1);