blob: 212752c15637457447650d1af3b9a7f66efd0bb7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
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;
}
|