mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-15 17:33:38 +00:00
tests/hard_coded/.gitignore:
tests/hard_coded/Mmakefile:
tests/hard_coded/getopt_maybe_option.exp:
tests/hard_coded/getopt_maybe_option.m:
Add test case for preceding fix for maybe_string options.
76 lines
2.0 KiB
Mathematica
76 lines
2.0 KiB
Mathematica
%---------------------------------------------------------------------------%
|
|
% vim: ts=4 sw=4 et ft=mercury
|
|
%---------------------------------------------------------------------------%
|
|
|
|
:- module getopt_maybe_option.
|
|
:- interface.
|
|
|
|
:- import_module io.
|
|
|
|
:- pred main(io::di, io::uo) is det.
|
|
|
|
%---------------------------------------------------------------------------%
|
|
|
|
:- implementation.
|
|
|
|
:- import_module getopt.
|
|
:- import_module list.
|
|
:- import_module maybe.
|
|
|
|
:- type option
|
|
---> i1
|
|
; i2
|
|
; s1
|
|
; s2.
|
|
|
|
:- type option_table == option_table(option).
|
|
|
|
:- pred short_option(character::in, option::out) is semidet.
|
|
|
|
short_option('i', i1).
|
|
|
|
:- pred long_option(string::in, option::out) is semidet.
|
|
|
|
long_option("i1", i1).
|
|
long_option("i2", i2).
|
|
long_option("s1", s1).
|
|
long_option("s2", s2).
|
|
|
|
:- pred option_default(option::out, option_data::out) is multi.
|
|
|
|
option_default(i1, maybe_int(no)).
|
|
option_default(i2, maybe_int(no)).
|
|
option_default(s1, maybe_string(no)).
|
|
option_default(s2, maybe_string(no)).
|
|
|
|
main(!IO) :-
|
|
OptionOps = option_ops_multi(short_option, long_option, option_default),
|
|
Args = [
|
|
"--no-i1",
|
|
"--i2", "123",
|
|
"--no-s1",
|
|
"--s2", "STR"
|
|
],
|
|
getopt.process_options(OptionOps, Args, _NonOptionArgs, OptionResult),
|
|
(
|
|
OptionResult = ok(OptionTable),
|
|
getopt.lookup_maybe_int_option(OptionTable, i1, I1),
|
|
getopt.lookup_maybe_int_option(OptionTable, i2, I2),
|
|
getopt.lookup_maybe_string_option(OptionTable, s1, S1),
|
|
getopt.lookup_maybe_string_option(OptionTable, s2, S2),
|
|
|
|
io.write_string("option i1: ", !IO),
|
|
io.print_line(I1, !IO),
|
|
io.write_string("option i2: ", !IO),
|
|
io.print_line(I2, !IO),
|
|
|
|
io.write_string("option s1: ", !IO),
|
|
io.print_line(S1, !IO),
|
|
io.write_string("option s2: ", !IO),
|
|
io.print_line(S2, !IO)
|
|
;
|
|
OptionResult = error(Error),
|
|
Msg = option_error_to_string(Error),
|
|
io.print_line(Msg, !IO)
|
|
).
|