ref: b08f20e577c31f439f4beb525125c6823b27c606
parent: daa3e93b17d5a3ba192da6b3a579fa00930b46dd
author: Ori Bernstein <ori@eigenstate.org>
date: Sat May 2 15:56:20 EDT 2015
Add std.optusage() function. Now you can show usage manually if needed.
--- a/libstd/optparse.myr
+++ b/libstd/optparse.myr
@@ -30,6 +30,7 @@
;;
const optparse : (optargs : byte[:][:], def : optdef# -> optparsed)
+ const optusage : (prog : byte[:], def : optdef# -> void)
;;
type optctx = struct
@@ -58,7 +59,7 @@
;;
if ctx.args.len < def.minargs
put("error: expected at least %z args, got %z\n", def.minargs, ctx.args.len)
- optusage(&ctx)
+ optusage(ctx.optargs[0], ctx.optdef)
exit(1)
;;
parsed.args = ctx.args
@@ -89,7 +90,7 @@
match optinfo(ctx, c)
| `None:
if c == 'h' || c == '?'
- optusage(ctx)
+ optusage(ctx.optargs[0], ctx.optdef)
exit(0)
else
fatal(1, "unexpected argument '%c'\n", c)
@@ -156,15 +157,15 @@
-> true
}
-const optusage = {ctx
- std.put("usage: %s [-h?]", ctx.optargs[0])
- for o in ctx.optdef.opts
+const optusage = {prog, def
+ std.put("usage: %s [-h?]", prog)
+ for o in def.opts
std.put("[-%c%s%s] ", o.opt, sep(o.arg), o.arg)
;;
- std.put("%s\n", ctx.optdef.argdesc)
+ std.put("%s\n", def.argdesc)
std.put("\t-h\tprint this help message\n")
std.put("\t-?\tprint this help message\n")
- for o in ctx.optdef.opts
+ for o in def.opts
std.put("\t-%c%s%s\t%s\n", o.opt, sep(o.arg), o.arg, o.desc)
;;
}