diff options
| author | Charles.Forsyth <devnull@localhost> | 2006-12-22 17:07:39 +0000 |
|---|---|---|
| committer | Charles.Forsyth <devnull@localhost> | 2006-12-22 17:07:39 +0000 |
| commit | 37da2899f40661e3e9631e497da8dc59b971cbd0 (patch) | |
| tree | cbc6d4680e347d906f5fa7fca73214418741df72 /appl/cmd/limbo/arg.m | |
| parent | 54bc8ff236ac10b3eaa928fd6bcfc0cdb2ba46ae (diff) | |
20060303a
Diffstat (limited to 'appl/cmd/limbo/arg.m')
| -rw-r--r-- | appl/cmd/limbo/arg.m | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/appl/cmd/limbo/arg.m b/appl/cmd/limbo/arg.m new file mode 100644 index 00000000..212752c1 --- /dev/null +++ b/appl/cmd/limbo/arg.m @@ -0,0 +1,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; +} |
