ACC SHELL
cmdopt_new
SYNOPSIS
Create a cmdopt object for parsing command-line options
USAGE
obj = cmdopt_new (Ref_Type error_routine)
DESCRIPTION
This function creates an returns an object that may be used by the
`cmdopt_process' function to parse command line arguments. The
`cmdopt_new' function takes a reference to an error handling
function that will get called upon error. In most cases, this
function should print out the error message, display a usage
message, and the call `exit'. If the error handler is NULL,
or it returns instead of calling exit, then an exception will be thrown.
The error hander must be defined to take a single string argument
(the error message) and must return nothing.
EXAMPLE
require ("cmdopt");
private define help_callback ()
{
() = fputs ("Usage: pgm [options] infile\n", stderr);
() = fputs ("Options:\n", stderr);
() = fputs (" -h|--help Show this help\n", stderr);
() = fputs (" -v|--verbose Increase verbosity level\n", stderr);
() = fputs (" -o|--output Output filename [stdout]\n", stderr);
exit (1);
}
private define error_handler (text)
{
() = fprintf (stderr, "%s\n", text);
help_callback ();
}
define slsh_main ()
{
variable verbose = 0;
outfile = "-"; % stdout
variable c = cmdopt_new (&error_handler);
cmdopt_add (c, "v|verbose", &verbose; inc);
cmdopt_add (c, "h|help", &help_callback);
cmdopt_add (c, "s:o|output", &outfile; type="str");
variable iend = cmdopt_process (c, __argv, 1);
if (verbose) message ("some informative message");
variable fp = stdout;
if (outfile != "-") fp = fopen (outfile, "w");
.
.
}
SEE ALSO
cmdopt_add, cmdopt_process
--------------------------------------------------------------
cmdopt_process
SYNOPSIS
Process the command-line options
USAGE
Int_Type cmdopt_process (optobj, argv, istart)
Struct_Type optobj;
Array_Type argv;
Int_Type istart
DESCRIPTION
This function parses the command line arguments in the string array
`argv' according to the rules specified by the `optobj'
object, previously allocated by `cmdopt_new'. The array of
strings is processed starting at the index specified by
`istart'. The function returns the index of the array element
where parsing stopped. Upon error, the function will call the error
handler established by the prior call to `cmdopt_new'.
EXAMPLE
define slsh_main ()
{
.
.
optobj = cmdopt_new (...);
cmdopt_add (optobj, ...);
.
.
variable iend = cmdopt_process (optobj, __argv, 1);
.
.
}
NOTES
This function may also be called in an object-oriented style using the
`process' method:
optobj = cmdopt_new (...);
optobj.add (...)
iend = optobj.process (__argv, 1);
SEE ALSO
cmdopt_add, cmdopt_new
--------------------------------------------------------------
cmdopt_add
SYNOPSIS
Add support for a command-line option
USAGE
cmdopt_add (optobj, optname, addr [,...] [;qualifiers])
Struct_Type optobj;
String_Type optname;
Ref_Type addr;
DESCRIPTION
This function adds support for a command-line option to
`optobj' and specifies how that option should be handled.
Handling an option involves setting the value of a variable
associated with the option, or by calling a function upon its
behalf.
For clarity, assume a command-line option can be specified using the
single character `f' or by the longer name `foo'. Then the
rules for calling `cmdopt_add' for the various flavors options
supported by this interface and how the option may be specified on
the command line are as follows:
Options that set a variable `v' to a value `val':
cmdopt_add (optobj, "f|foo" &v; default=val);
cmdline: pgm -f ...
cmdline: pgm --foo ...
Options that increment an integer variable `v':
cmdopt_add (optobj, "f|foo" &v; inc);
cmdline: pgm -f -f ... % In these examples, v
cmdline: pgm --foo --foo ... % gets incremented twice
Options that bitwise-or an integer variable `v' with `FLAG':
cmdopt_add (optobj, "f|foo" &v; bor=FLAG);
cmdline: pgm -f ... % v = v | FLAG
cmdline: pgm --foo ... % v = v | FLAG
Options that bitwise-and an integer variable `v' with `MASK':
cmdopt_add (optobj, "f|foo" &v; band=MASK);
cmdline: pgm -f ... % v = v & MASK;
cmdline: pgm --foo ... % v = v & MASK;
The above two options may be combined:
cmdopt_add (optobj, "f|foo" &v; bor=FLAG1, band=~FLAG2);
cmdline: pgm -f ... % v &= ~FLAG2; v |= FLAG1;
Options that require a value and set `v' to the value VAL.
cmdopt_add (optobj, "f|foo" &v; type="int");
cmdline: pgm -f VAL ...
cmdline: pgm -fVAL ...
cmdline: pgm --foo VAL ...
cmdline: pgm --foo=VAL ...
Options whose value is optional:
cmdopt_add (optobj, "f|foo" &v; type="string", optional=DLFT);
cmdline: pgm -f ... % set v to DFLT
cmdline: pgm -fVAL ... % set v to VAL
cmdline: pgm --foo ... % set v to DFLT
cmdline: pgm --foo=VAL ... % set v to VAL
For the latter two cases, if the `append' qualifier is used,
then instead of assigning the value to the specified variable, the
value will be appended to a list assigned to the variable, e.g.,
cmdopt_add (optobj, "f|foo", &v; type="float", append);
Then the command line `pgm --foo=VAL1 -fVAL2 -f VAL3 ...' will
result in the assignment to `v' or the 3 element list
`{VAL1, VAL2, VAL3}'.
An option can also be associated with a callback function that get
called when the option is handled.
Options that cause a function to be called with arguments
`a0,...':
cmdopt_add (optobj, "f|foo", &func, a0...);
cmdline: pgm --foo
cmdline: pgm -f
Here `func' should be written with the signature:
define func (a0, ...) {...}
Options that take a value and cause a function to be called with
additional arguments `a0,...':
cmdopt_add (optobj, "f|foo", &func, a0,...; type="int");
cmdline: pgm --foo=VAL
cmdline: pgm -f VAL
cmdline: pgm -fVAL
In this case, `func' should be written as
define func (value, a0, ...) {...}
As the above examples illustrate, the data-type of the value assigned
to a variable must be specified using the `type' qualifier.
Currently the `type' must be set to one of the following values:
"str" (String_Type)
"int" (Int_Type)
"float" (Double_Type)
NOTES
This function may also be called in an object-oriented style using the
`add' method:
optobj = cmdopt_new (...);
optobj.add ("f|foo", &func, a0,...; type="int");
SEE ALSO
cmdopt_new, cmdopt_process
--------------------------------------------------------------
ACC SHELL 2018