Re: Modified CLI parsing API.
[Thread Prev] | [Thread Next]
- Subject: Re: Modified CLI parsing API.
- From: Ori Bernstein <ori@xxxxxxxxxxxxxx>
- Date: Sat, 2 May 2015 19:57:08 -0700
- To: Ryan Gonzalez <rymg19@xxxxxxxxx>
- Cc: myrddin-dev@xxxxxxxxxxxxxx
Done.
std.optusage(argv[0], &defs)
On Sat, 2 May 2015 18:49:53 -0500, Ryan Gonzalez <rymg19@xxxxxxxxx> wrote:
> I am very happy with this, considering that 99% of my hate for getopt stems
> from the general API (e.g. no auto help message, the need to do everything
> manually, those stupid option strings...).
>
> Would it be possible to add an external std.show_usage function that shows
> the first line of the usage message? So I could do stuff like:
>
> | ('x', arg):
> if is_not_number(arg)
> std.put("-x argument must be a number\n")
> std.show_usage(opts)
> ;;
> ;;
>
>
> On Sat, May 2, 2015 at 6:36 PM, Ori Bernstein <ori@xxxxxxxxxxxxxx> wrote:
>
> > I'm moving away from getopt-like strings, and towards something that
> > specifies
> > arguments so that help messages can be automatically generated. For an
> > example
> > of usage, take a look at the mbld source:
> >
> > http://git.eigenstate.org/ori/mc.git/tree/mbld/main.myr
> >
> > To see the data structures and implementation:
> >
> > http://git.eigenstate.org/ori/mc.git/tree/libstd/optparse.myr
> >
> > Eventually, when I fix environment capture, I may move to closures for
> > parsed
> > options, rather than argument lists.
> >
> > Relevant summary:
> >
> > opts = [
> > /* only used for the description: usage: progname [arg
> > summary] argdesc */
> > .argdesc = "inputlist description",
> >
> > /* if we get less than minargs [discounting options], we
> > error */
> > .minargs = 1
> >
> > /*
> > the description of the option list.
> >
> > -h and -? are handled automatically, but you can
> > override if you want.
> > */
> > .opts = [
> > /* an option that takes a mandatory argument */
> > [.opt='x', .arg="xample", .desc="description"],
> > /* an option that takes an optional argument: -*/
> > [.opt='o', .arg="optional", .desc="description",
> > .optional=true],
> >
> > /* an option that takes no argument. */
> > [.opt='y', .arg="", .desc="description"],
> > /* equivalently, .arg= can be dropped */
> > [.opt='z', .desc="description"],
> > ][:]
> > ]
> >
> > parsed = std.optparse(args, &opts)
> > for o in parsed.opts
> > match o
> > | ('x', arg): /* arg is a string */
> > | ('y', arg): /* arg is an empty string for no args. */
> > | ('y', ""): /* again, empty string; since 'z' takes no
> > args, we always get an empty value */
> > | ('z', ""): /* see above */
> > | _:
> > /* due to exhaustiveness checking, we have to have
> > a default case. */
> > std.die("impossible");
> > ;;
> > ;;
> >
> > for a in parsed.args:
> > std.put("arg: %s\n", arg)
> > ;;
> >
> >
> > --
> > Ori Bernstein
> >
> >
>
>
> --
> Ryan
> [ERROR]: Your autotools build scripts are 200 lines longer than your
> program. Something’s wrong.
> http://kirbyfan64.github.io/
--
Ori Bernstein
| Modified CLI parsing API. | Ori Bernstein <ori@xxxxxxxxxxxxxx> |
| Re: Modified CLI parsing API. | Ryan Gonzalez <rymg19@xxxxxxxxx> |
- Prev by Date: Re: Modified CLI parsing API.
- Next by Date: Tuples?
- Previous by thread: Re: Modified CLI parsing API.
- Next by thread: Tuples?
- Index(es):