bionic (3) Tcl_ParseArgsObjv.3tcl.gz

Provided by: tcl8.6-doc_8.6.8+dfsg-3_all bug

NAME

       Tcl_ParseArgsObjv - parse arguments according to a tabular description

SYNOPSIS

       #include <tcl.h>

       int
       Tcl_ParseArgsObjv(interp, argTable, objcPtr, objv, remObjv)

ARGUMENTS

       Tcl_Interp *interp (out)                    Where to store error messages.

       const Tcl_ArgvInfo *argTable (in)           Pointer to array of option descriptors.

       int *objcPtr (in/out)                       A  pointer  to  variable holding number of arguments in objv.
                                                   Will be modified to hold number  of  arguments  left  in  the
                                                   unprocessed argument list stored in remObjv.

       Tcl_Obj *const *objv (in)                   The array of arguments to be parsed.

       Tcl_Obj ***remObjv (out)                    Pointer to a variable that will hold the array of unprocessed
                                                   arguments.  Should  be  NULL  if  no  return  of  unprocessed
                                                   arguments  is  required.  If objcPtr is updated to a non-zero
                                                   value, the array returned through this  must  be  deallocated
                                                   using ckfree.
________________________________________________________________________________________________________________

DESCRIPTION

       The  Tcl_ParseArgsObjv  function  provides  a  system  for  parsing argument lists of the form “-someName
       someValue ...”.  Such argument lists are commonly found both in the arguments to a  program  and  in  the
       arguments  to  an  individual  Tcl  command. This parser assumes that the order of the arguments does not
       matter, other than in so far as later copies of a duplicated option overriding earlier ones.

       The argument array is described by the objcPtr and objv parameters, and an array of unprocessed arguments
       is returned through the objcPtr and remObjv parameters; if no return of unprocessed arguments is desired,
       the remObjv parameter should be NULL. If any problems happen, including if the “generate help” option  is
       selected,  an  error  message is left in the interpreter result and TCL_ERROR is returned. Otherwise, the
       interpreter result is left unchanged and TCL_OK is returned.

       The collection of arguments to be parsed is described by the argTable parameter. This points to  a  table
       of  descriptor  structures  that  is  terminated  by an entry with the type field set to TCL_ARGV_END. As
       convenience, the following prototypical entries are provided:

       TCL_ARGV_AUTO_HELP
              Enables the argument processor to provide help when passed the argument “-help”.

       TCL_ARGV_AUTO_REST
              Instructs the argument processor that arguments after “--” are to be unprocessed.

       TCL_ARGV_TABLE_END
              Marks the end of the table of argument descriptors.

   ARGUMENT DESCRIPTOR ENTRIES
       Each entry of the argument descriptor table must be a structure of type Tcl_ArgvInfo.  The  structure  is
       defined as this:

              typedef struct {
                  int type;
                  const char *keyStr;
                  void *srcPtr;
                  void *dstPtr;
                  const char *helpStr;
                  ClientData clientData;
              } Tcl_ArgvInfo;

       The  keyStr  field  contains  the  name of the option; by convention, this will normally begin with a “-”
       character. The type, srcPtr, dstPtr and clientData fields describe the interpretation of the value of the
       argument,  as  described  below.  The helpStr field gives some text that is used to provide help to users
       when they request it.

       As noted above, the type field is used to describe  the  interpretation  of  the  argument's  value.  The
       following values are acceptable values for type:

       TCL_ARGV_CONSTANT
              The  argument  does  not  take  any following value argument. If this argument is present, the int
              pointed to by the srcPtr field is copied to the dstPtr field. The clientData field is ignored.

       TCL_ARGV_END
              This value marks the end of all option descriptors in the table. All other fields are ignored.

       TCL_ARGV_FLOAT
              This argument takes a  following  floating  point  value  argument.  The  value  (once  parsed  by
              Tcl_GetDoubleFromObj) will be stored as a double-precision value in the variable pointed to by the
              dstPtr field. The srcPtr and clientData fields are ignored.

       TCL_ARGV_FUNC
              This argument optionally takes a following value argument;  it  is  up  to  the  handler  callback
              function passed in srcPtr to decide. That function will have the following signature:

                     typedef int (Tcl_ArgvFuncProc)(
                             ClientData clientData,
                             Tcl_Obj *objPtr,
                             void *dstPtr);

              The result is a boolean value indicating whether to consume the following argument. The clientData
              is the value from the table entry, the objPtr is the value that represents the following  argument
              or   NULL  if  there  are  no  following  arguments  at  all,  and  the  dstPtr  argument  to  the
              Tcl_ArgvFuncProc is the location to write the parsed value to.

       TCL_ARGV_GENFUNC
              This argument takes zero or more following arguments; the  handler  callback  function  passed  in
              srcPtr returns how many (or a negative number to signal an error, in which case it should also set
              the interpreter result). The function will have the following signature:

                     typedef int (Tcl_ArgvGenFuncProc)(
                             ClientData clientData,
                             Tcl_Interp *interp,
                             int objc,
                             Tcl_Obj *const *objv,
                             void *dstPtr);

              The clientData is the value from the table entry, the interp is where to store any error messages,
              the  keyStr  is  the  name  of  the argument, objc and objv describe an array of all the remaining
              arguments, and dstPtr argument to the Tcl_ArgvGenFuncProc is the  location  to  write  the  parsed
              value (or values) to.

       TCL_ARGV_HELP
              This   special   argument  does  not  take  any  following  value  argument,  but  instead  causes
              Tcl_ParseArgsObjv to generate an error message  describing  the  arguments  supported.  All  other
              fields except the helpStr field are ignored.

       TCL_ARGV_INT
              This   argument   takes   a   following   integer  value  argument.  The  value  (once  parsed  by
              Tcl_GetIntFromObj) will be stored as an int in the variable pointed to by the  dstPtr  field.  The
              srcPtr field is ignored.

       TCL_ARGV_REST
              This  special argument does not take any following value argument, but instead marks all following
              arguments to be left unprocessed. The srcPtr, dstPtr and clientData fields are ignored.

       TCL_ARGV_STRING
              This argument takes a following string value argument. A pointer to the string will be  stored  at
              dstPtr; the string inside will have a lifetime linked to the lifetime of the string representation
              of the argument value that it came from, and so should be copied if it needs to be  retained.  The
              srcPtr and clientData fields are ignored.

SEE ALSO

       Tcl_GetIndexFromObj(3tcl), Tcl_Main(3tcl), Tcl_CreateObjCommand(3tcl)

KEYWORDS

       argument, parse