Exemple #1
0
/* Note that sanitizing the trailing part of (*inp)[ii].value was the responsibility of read_inpfile() */
gmx_int64_t get_eint64(int *ninp, t_inpfile **inp,
                       const char *name, gmx_int64_t def,
                       warninp_t wi)
{
    char            buf[32], *ptr, warn_buf[STRLEN];
    int             ii;
    gmx_int64_t     ret;

    ii = get_einp(ninp, inp, name);

    if (ii == -1)
    {
        sprintf(buf, "%"GMX_PRId64, def);
        (*inp)[(*ninp)-1].value = gmx_strdup(buf);

        return def;
    }
    else
    {
        ret = str_to_int64_t((*inp)[ii].value, &ptr);
        if (*ptr != '\0')
        {
            sprintf(warn_buf, "Right hand side '%s' for parameter '%s' in parameter file is not an integer value\n", (*inp)[ii].value, (*inp)[ii].name);
            warning_error(wi, warn_buf);
        }

        return ret;
    }
}
/* Same as above, but for large integer values */
static gmx_int64_t istepscan(int argc, char *argv[], int *i)
{
    const char *const arg = argv[*i];
    if (argc <= (*i)+1)
    {
        usage("an integer", arg);
    }
    const char *const value = argv[++(*i)];
    char             *endptr;
    gmx_int64_t       var = str_to_int64_t(value, &endptr);
    if (*value == '\0' || *endptr != '\0')
    {
        usage("an integer", arg);
    }
    return var;
}