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;}
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;
}