[m-dev.] Getopt extension for discussion

Philip Dart philip at cs.mu.oz.au
Tue Apr 22 10:43:58 AEST 1997


> I was talking with Philip the other day, and he asked for a "maybe string"
> option type so that you can have:
> 	--opt "a string"
> or	--no-opt
> 
> He argued that this was better than using the empty string as a sentinel
> for the "no" case. The example application was filenames (in which case
> "" would always be a valid sentinel). Following is a diff that adds the
> requested functionality.

> Can anyone give a realistic example where "" is not a valid sentinel, where
> the maybe string option would be a real advantage?

Since it was my example, I thought I'd provide some more detail ...

The example a program that uses a startup file, where a default
startup file is provided eg. part of the installation.
The option

	-s filename

could be used to specify a different startup file, and the option

	-s-

could be used to say indicate that no startup file should be read.
This is quite common requirement, eg. for shells and typecheckers :-)
It's also a simple extension which doesn't affect the current use of getopt.

> +getopt__process_option(maybe_string(_), _Option, Flag, MaybeArg, _OptionOps,
> +		OptionTable0, Result) :-
> +	( MaybeArg = yes(Arg) ->
> +		map__set(OptionTable0, Flag, maybe_string(yes(Arg)),
> +				OptionTable),
> +		Result = ok(OptionTable)
> +	;
> +		error("string argument expected in getopt__process_option")
> +	).

Tom, this error string should be different from the one used
for the clause for string(_).

Also, since you've made this change (and posted it before I could post
mine :-), please fix the bug where "-" appearing as an option is ignored
altogether.  This should be passed through as an argument.
Fixing this will allow "-" to be treated as stdin/stdout as for diff or tar.
(Though bash treats "-" the same as "--" but we can't have everything).

Philip



More information about the developers mailing list