tclGetOpts - getopt

NAME
getopt, optind, optindc - parse command-line options in TCL

SYNOPSIS
getopt arglist optstring optret argret

DESCRIPTION
getopt sets the variable optret to the next option letter in arglist that matches a letter in optstring. optstring must contain the option letters the command using getopt will recognize; if a letter is followed by a colon, the option is expected to have an argument. The variable argret will be set to the option argument, if any.

getopt sets the global variables optind and optindc to point to the next option letter in arglist to be processed; optind holds the index of the option in the list, and optindc holds the index of the option letter in the string.

When all options have been processed (that is, up to the first non-option argument), getopt returns an empty string. The special option -- may be used to delimit the end of the options; when it is encountered, optret will be set to the empty string, and the -- will be skipped.

If getopt encounters an option in arglist that is not described in optstring, or it finds an option with no argument when the option requires one, it sets optret to a blank string and argret to an error message.

getopt returns 1 if an option was found, 0 if no more options were found, and -1 if an error occurred.

EXAMPLE
The following script accepts the exclusive options -a and -b, and the option -o with an argument.
     #!/usr/local/bin/tclsh

     set opts(a) 0
     set opts(b) 0
     set opts(o) ""

     proc usage {} {
       puts stderr "Usage: $argv0 [ -a | -b ] [ -o <string> ]"
       exit 22
     }

     while { [ set err [ getopt $argv "abo:" opt arg ]] } {
       if { $err < 0 } then {
         puts stderr "$argv0: $arg"
         usage
       } else {
         switch -exact $opt {
           a {
             if { $found(b) } then {
               puts stderr "$argv0: Only one of -a and -b may be specified!"
               usage
             } else {
               set found(a) 1
             }
           }
           b {
             if { $found(a) } then {
               puts stderr "$argv0: Only one of -a and -b may be specified!"
               usage
             } else {
               set found(b) 1
             }
           }
           o {
             set found(o) $optarg
           }
         }
       }
     }

     set argv [ lrange $argv $optind end ]

     if { $found(a) } then {
       puts stdout "Found option -a"
     }

     if { $found(b) } then {
       puts stdout "Found option -b"
     }

     if { [ string length $found(o) ] } then {
       puts stdout "Found option -o:
     }

     puts -nonewline stdout "The rest of the arguments are: "
     set prefix ""
     foreach arg $argv {
       puts -nonewline stdout "$prefix
       set prefix ", "
     }
     puts stdout ""

SEE ALSO
getopt(3C), typedopts
http://www.waxandwane.com/toolbox/tclGetOpts/

AUTHOR
Ross Mohn, RPMohn@panix.com
Johnson Earls

WARNING
Changing the value of the variable optind, or calling getopt with a different arglist, may lead to unexpected results.