ref: babf901b4a508c3ec5d1f89655f10377bbdf9637
dir: /appl/cmd/limbo/arg.m/
Arg: adt
{
argv: list of string;
c: int;
opts: string;
init: fn(argv: list of string): ref Arg;
opt: fn(arg: self ref Arg): int;
arg: fn(arg: self ref Arg): string;
};
Arg.init(argv: list of string): ref Arg
{
if(argv != nil)
argv = tl argv;
return ref Arg(argv, 0, nil);
}
Arg.opt(arg: self ref Arg): int
{
if(arg.opts != ""){
arg.c = arg.opts[0];
arg.opts = arg.opts[1:];
return arg.c;
}
if(arg.argv == nil)
return arg.c = 0;
arg.opts = hd arg.argv;
if(len arg.opts < 2 || arg.opts[0] != '-')
return arg.c = 0;
arg.argv = tl arg.argv;
if(arg.opts == "--")
return arg.c = 0;
arg.c = arg.opts[1];
arg.opts = arg.opts[2:];
return arg.c;
}
Arg.arg(arg: self ref Arg): string
{
s := arg.opts;
arg.opts = "";
if(s != "")
return s;
if(arg.argv == nil)
return "";
s = hd arg.argv;
arg.argv = tl arg.argv;
return s;
}