From: Pierre Habouzit Date: Mon, 23 Jun 2008 21:28:56 GMT Subject: Re: [RFC] Re: Convert 'git blame' to parse_options() Message-ID: <20080623212855.GE13395@artemis.madism.org> In-Reply-To: <7vprq7hmkx.fsf@gitster.siamese.dyndns.org> On Mon, Jun 23, 2008 at 09:23:58PM +0000, Junio C Hamano wrote: > Pierre Habouzit writes: > > > With that, you write parsers this way: > > > > { > > struct parse_opt_ctx_t ctx; > > > > parse_options_start(&ctx, argc, argv, 0); > > > > for (;;) { > > const char *arg; > > > > switch (parse_options_step(&ctx, options, usagestr)) { > > case PARSE_OPT_HELP: > > /* dump your help here, the one for options/usagestr is already dumped */ > > exit(129); > > case PARSE_OPT_DONE: > > goto done; > > } > > > > arg = *ctx->argv++; > > ctx->argc--; > > > > if (strcmp(arg, "-")) { > > /* you're on baby ! */ > > } else if .... > > } else { > > error("unknown option %s", arg); > > parse_options_usage(options, usagestr); > > /* dump your help here */ > > exit(129); > > } > > } > > > > done: > > argc = parse_options_end(&ctx); > > } > > Nice. I have started doing the same (insignificant details are different; > e.g. I used "positive is unknown" convention instead ) and then the > solution is sitting in my mbox ;-) Well it's still rough on the edges, totally untested (I didn't bother to run the testsuite), but I wanted some feedback before I cook this to something nicer. -- ·O· Pierre Habouzit ··O madcoder@debian.org OOO http://www.madism.org