[[tags: egg]] == easy-args [[toc:]] === Description Handle command-line arguments as parameter objects. '''Note:''' This egg is no longer supported. Please refer to [[/eggref/4/srfi-37|srfi-37]], [[/eggref/4/args|args]] or [[/eggref/4/getopt-long|getopt-long]] for command-line argument handling libraries. === Requirements [[/eggref/4/srfi-37|srfi-37]] === API ==== define-arguments (define-arguments (name [value [guard]]) ...) {{define-arguments}} defines parameter objects for the given command line option names and sets them according to the program's {{command-line-arguments}} parameter. For each specified argument, {{name}} should be an identifier or list of identifiers. The first of these will be bound to the newly-created parameter object. {{value}}, if given, must be a boolean, string, number or symbol, and will be the default value of the parameter object. If no {{value}} is given, {{#f}} is used. If a procedure {{guard}} is given, it is used as the parameter object's conversion procedure. Each {{name}}, when prefixed by one dash (in the case of a single-character identifier) or two (for all others), will be used as a command-line flag to set the corresponding parameter object's value. If {{name}} contains asterisks, they are stripped from the flag. {{define-arguments}} reads and modifies Chicken's {{command-line-arguments}} parameter, setting matched parameter objects to the specified values and removing their options from the list. Unmatched arguments are accumulated into an alist accessible by the {{unmatched-arguments}} procedure. Upon completion, {{command-line-arguments}} will contain any non-option arguments to the program. The return value is unspecified. ==== invalid-argument-handler invalid-argument-handler {{invalid-argument-handler}} is called when {{define-arguments}} encounters an invalid command-line value. It is a procedure of three arguments: an error message (string), option name (string or character) and value (a string or {{#t}}). By default, this procedure simply prints an error message and exits the program. ==== unmatched-arguments (unmatched-arguments) Returns an alist of the command-line arguments unmatched by {{define-arguments}}. If called before {{define-arguments}}, it will return an empty list. === Examples (use easy-args extras) (define-arguments (all-caps) (prompt "Your name? ") ((exclamations e) 1)) (display (prompt)) (let ((message (string-join `("Hello," ,(read-line))))) (if (all-caps) (display (string-upcase message)) (display message))) (print (make-string (exclamations) #\!)) (if (not (null? (unmatched-arguments))) (print (unmatched-arguments))) With the file above as {{greeter.scm}}: $ csc greeter.scm $ ./greeter Your name? [Henrietta] Hello, Henrietta! $ ./greeter --all-caps Your name? [Henrietta] HELLO, HENRIETTA! $ ./greeter --prompt 'Name: ' -e3 Name: [Henrietta] Hello, Henrietta!!! $ ./greeter -w --unmatched=args Your name? Henrietta Hello, Henrietta! ((w . #t) (unmatched . args)) === History * 0.6 Deprecated * 0.5 Use srfi-37, getopt-style flags * 0.4 Allow symbols * 0.1 Initial release === Author [[Evan Hanson]] === License Public Domain