Method code for $parse_lib.opt()

[Turn on line numbering]
arg line, @defs;
var out, a, l, x, m, args, opts, o, i, v;

// submit: ["template", "template"..]
// => if value is 1, it will take the next part of the string
// receive: [["template", "flag", bool, value]], [...]];
opts = (args = []);
line = line.explode_quoted();
l = listlen(line);
x = 1;
while (x <= l) {
    a = line[x];
    if ((m = regexp(a, "^[+-]"))) {
        o = m[1] == "+";
        v = "";
        a = substr(a, 2).trim();
        if (!a)
            throw(~stop, "Missing option flag following '" + (o ? "+" : "-") + "'");
        if ((i = "=" in a)) {
            if (i == strlen(a) && listlen(line) > x) {
                v = line[++x];
                a = substr(a, 1, strlen(a) - 1).trim();
            } else {
                [a, v] = explode(a, "=", 1);
            }
        }
        if ((i = find m in (defs) where (match_template(a, m))))
            opts += [[defs[i], a, o, v]];
        else
            opts += [[0, a, o, v]];
    } else {
        args += [a];
    }
    x++;
}
return [args, opts];

// $#Edited: 07 Sep 01 22:57 $brandon

["// Created 26-Mar-1995 as a part of ColdCore, see: @help Credit"]

the Cold Dark