xref: /inferno-os/appl/cmd/limbo/arg.m (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1Arg: adt
2{
3	argv:	list of string;
4	c:	int;
5	opts:	string;
6
7	init:	fn(argv: list of string): ref Arg;
8	opt:	fn(arg: self ref Arg): int;
9	arg:	fn(arg: self ref Arg): string;
10};
11
12Arg.init(argv: list of string): ref Arg
13{
14	if(argv != nil)
15		argv = tl argv;
16	return ref Arg(argv, 0, nil);
17}
18
19Arg.opt(arg: self ref Arg): int
20{
21	if(arg.opts != ""){
22		arg.c = arg.opts[0];
23		arg.opts = arg.opts[1:];
24		return arg.c;
25	}
26	if(arg.argv == nil)
27		return arg.c = 0;
28	arg.opts = hd arg.argv;
29	if(len arg.opts < 2 || arg.opts[0] != '-')
30		return arg.c = 0;
31	arg.argv = tl arg.argv;
32	if(arg.opts == "--")
33		return arg.c = 0;
34	arg.c = arg.opts[1];
35	arg.opts = arg.opts[2:];
36	return arg.c;
37}
38
39Arg.arg(arg: self ref Arg): string
40{
41	s := arg.opts;
42	arg.opts = "";
43	if(s != "")
44		return s;
45	if(arg.argv == nil)
46		return "";
47	s = hd arg.argv;
48	arg.argv = tl arg.argv;
49	return s;
50}
51