[Turn on line numbering]
arg string, @units;
var words, len, nsec, n, i, entry, unit;
[(units ?= time_units)] = units;
words = string.explode();
words = words.setremove_all(["and"]);
if (listlen(words) == 1) {
if (!(words = regexp(words[1], "^([0-9]+)(.*)$")))
throw(~args, "Invalid time.");
}
len = listlen(words);
if (len % 2)
throw(~args, "Unrecognized time '" + string + "', no descriptor.");
nsec = (n = 0);
for i in [1 .. len] {
if (i % 2 == 1) {
if (words[i].is_numeric())
n = words[i].to_number();
else if (words[i] in ["a", "an"])
n = 1;
else if (words[i] == "no")
n = 0;
else
throw(~invarg, "Invalid time element '" + n + "'.");
} else {
unit = words[i];
unit = unit.strip(",");
nsec += (> units[.parse_unit(unit, units)][1] <) * n;
}
}
return nsec;
["// Created 19-Nov-1996 as a part of ColdCore, see: @help Credit"]