Next: , Previous: Parameter lists, Up: Programs and Arguments


4.4.5 Getopt Parameter lists

(require 'getopt-parameters)

— Function: getopt->parameter-list optnames arities types aliases desc ...

Returns *argv* converted to a parameter-list. optnames are the parameter-names. arities and types are lists of symbols corresponding to optnames.

aliases is a list of lists of strings or integers paired with elements of optnames. Each one-character string will be treated as a single ‘-’ option by getopt. Longer strings will be treated as long-named options (see getopt–).

If the aliases association list has only strings as its cars, then all the option-arguments after an option (and before the next option) are adjoined to that option.

If the aliases association list has integers, then each (string) option will take at most one option-argument. Unoptioned arguments are collected in a list. A ‘-1’ alias will take the last argument in this list; ‘+1’ will take the first argument in the list. The aliases -2 then +2; -3 then +3; ... are tried so long as a positive or negative consecutive alias is found and arguments remain in the list. Finally a ‘0’ alias, if found, absorbs any remaining arguments.

In all cases, if unclaimed arguments remain after processing, a warning is signaled and #f is returned.

— Function: getopt->arglist optnames positions arities types defaulters checks aliases desc ...

Like getopt->parameter-list, but converts *argv* to an argument-list as specified by optnames, positions, arities, types, defaulters, checks, and aliases. If the options supplied violate the arities or checks constraints, then a warning is signaled and #f is returned.

These getopt functions can be used with SLIB relational databases. For an example, See make-command-server.

If errors are encountered while processing options, directions for using the options (and argument strings desc ...) are printed to current-error-port.

     (begin
       (set! *optind* 1)
       (set! *argv* '("cmd" "-?")
       (getopt->parameter-list
        '(flag number symbols symbols string flag2 flag3 num2 num3)
        '(boolean optional nary1 nary single boolean boolean nary nary)
        '(boolean integer symbol symbol string boolean boolean integer integer)
        '(("flag" flag)
          ("f" flag)
          ("Flag" flag2)
          ("B" flag3)
          ("optional" number)
          ("o" number)
          ("nary1" symbols)
          ("N" symbols)
          ("nary" symbols)
          ("n" symbols)
          ("single" string)
          ("s" string)
          ("a" num2)
          ("Abs" num3))))
     -|
     Usage: cmd [OPTION ARGUMENT ...] ...
     
       -f, --flag
       -o, --optional=<number>
       -n, --nary=<symbols> ...
       -N, --nary1=<symbols> ...
       -s, --single=<string>
           --Flag
       -B
       -a        <num2> ...
           --Abs=<num3> ...
     
     ERROR: getopt->parameter-list "unrecognized option" "-?"