Home

GEONius.com
29-Feb-2016
E-mail

OptionsScan - Command-Line Options Scan

An OptionsScan object represents the scan of a set of UNIX-style command line arguments. OptionsScan objects can scan and parse:

  1. single-letter options; e.g., "-a"
  2. single-letter options expecting arguments; e.g., "-o file"
  3. word options; e.g., "-readonly"
  4. word options with arguments; e.g., "-list file"
  5. redirection of standard input and output on systems that don't support it at the shell level; e.g., "> outputFile"

The scanning algorithm used by the OptionsScan class allows word options to be abbreviated on the command line. For example, the "-list file" word option in (4) above can be entered on the command line as "-l file", "-li file", "-lis file", or "-list file". If the one-character abbreviation of a word conflicts with a single-letter option, the single-letter option takes priority.

The following command line

    % program -a -o objectFile -readonly -list file

would be scanned and parsed as follows using the OptionsScan class:

    #include  "OptionsScan.h"
    char  *argument ;
    int  option ;
    OptionsScan  *scan = new OptionsScan ("ao:{readonly}{object:}") ;

    scan->Start (argc, argv) ;
    while (option = scan->Get (&argument)) {
        switch (option) {
        case 1:  ... process "-a" option ...
        case 2:  ... process "-o file" option argument ...
        case 3:  ... process "-readonly" option ...
        case 4:  ... process "-list file" option ...
        case OptionsScan::NONOPT:
            ... process non-option argument ...
        case OptionsScan::OPTERR:
            ... invalid option or missing argument ...
        }
    }

Applications that will scan multiple command lines using the same set of allowable options can cache the original scan context, resetting it for each new command line (represented by a new argc/argv set of arguments):

    static  char  *optionList[] = {		// Command line options.
        "a", "o:", "{readonly}", "{object:}", 0
    } ;
    static  OptionsScan  *scan = new OptionsScan (optionList) ;
    ...
    for (... each new ARGC/ARGV set of arguments ...) {
        scan->Start (argc, argv) ;
        while (option = scan->Get (&argument)) {
            ... process options ...
        }
    }

Note in the example above that the valid command line options are specified in list form rather than in-line.

Note: This class is a quick C++ implementation of my OPT_UTIL C package. As such, large blocks of comments and code were simply cut and pasted from the C package. It's not pretty, but it seems to work and it provides a reasonably clean interface for scanning command line arguments.


Public Methods

OptionsScan() - creates an options scan from an inline options string.
OptionsScan() - creates an options scan from an array of options strings.
~OptionsScan() - destroys an options scan.
Errors() - redirects error output.
Get() - gets the next option and/or argument from the command line.
NameOf() - returns an option's full name.
Position() - returns the index of the last argument scanned.
Position() - sets the index of the next argument to be scanned.
Start() - begin scanning a command line string.
Start() - begin scanning an argc/argv command line.

Private Methods

Init() - initializes an options scan's internal state.

Source Files

OptionsScan.cpp
OptionsScan.h

Alex Measday  /  E-mail