## Tcl8.6.17/Tk8.6.17 Documentation > Tcl C API > ParseArgs

### Tcl/Tk Applications | Tcl Commands | Tk Commands | [incr Tcl] Package Commands | SQLite3 Package Commands | TDBC Package Commands | tdbc::mysql Package Commands | tdbc::odbc Package Commands | tdbc::postgres Package Commands | tdbc::sqlite3 Package Commands | Thread Package Commands | Tcl C API | Tk C API | [incr Tcl] Package C API | TDBC Package C API

  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)
    const Tcl_ArgvInfo *argTable (入力in)
    int *objcPtr (入出力in/out)
    Tcl_Obj *const *objv (入力in)
    Tcl_Obj ***remObjv (出力out)
  説明 DESCRIPTION
    TCL_ARGV_AUTO_HELP
    TCL_ARGV_AUTO_REST
    TCL_ARGV_TABLE_END
  引数記述子見出し ARGUMENT DESCRIPTOR ENTRIES
    TCL_ARGV_CONSTANT
    TCL_ARGV_END
    TCL_ARGV_FLOAT
    TCL_ARGV_FUNC
    TCL_ARGV_GENFUNC
    TCL_ARGV_HELP
    TCL_ARGV_INT
    TCL_ARGV_REST
    TCL_ARGV_STRING
  SEE ALSO
  KEYWORDS

### 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)
  objv 内の引数の個数を保有する変数への指示子｡remObjv 内に保存された未処理引数に残る引数の個数を保有する為に修正されることになる｡　 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)
  未処理の引数の配列を保有することになる変数への指示子｡未処理引数の返り値なしが要求されるときは NULL になる筈｡ もし objcPtr が非零値に更新された場合､ここを通して返された配列は ckfree を使用して割当て解除されねばならない｡　 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

Tcl_ParseArgsObjv 函数は､形式 “-someName someValue ...” の形式の引数リストの解析の為の体系を提供する｡その様な引数リストは通常､算譜への引数か個別の Tcl 命令への引数かに見られる｡この解析譜は引数の順序は他のことに較べてずっと影響が少ないことを仮定し､重複した選択肢の複写は前のもので上書きするほどである｡ 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.

引数の配列は objcPtr and objv 假引数によって記述され､処理されていない引数の配列は objcPtr and remObjv 假引数を通して返される; もし未処理の引数が何も返されないことが望まれる場合､ remObjv 假引数は NULL.であるべきである｡もしなにか問題が生じた場合､ “ヘルプ発生” 選択肢が選択された場合も含めて､不都合伝言文が解釈実行機能の結果に残され TCL_ERROR が返される｡それ以外の場合､解釈実行機能の結果は変化されずに残され TCL_OK が返される｡ 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.

解析される引数の集まりは argTable 假引数によって記述される｡これは記述子構造の表を指し､それは TCL_ARGV_END.に設定された type 欄の見出しによって終了する｡便宜の為に､次の原型見出しが提供される: 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
  引数 “-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

引数記述子の表の夫々の見出しは型 Tcl_ArgvInfo の構造である筈である｡その構造はこのように定義される:　 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;

keyStr 欄は選択肢の名前を含む; 慣例ではこれは “-” 文字で始まる｡ type, srcPtr, dstPtr and clientData 欄は下に記述するように引数の値の解釈を記述する｡ helpStr 欄は使用者が要求した時に参考を与える為に使われる何かの文書を与える｡ 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
  この引数はどのような引続く値の引数も取らない｡もしこの引数が存在すると､ srcPtr 欄の(整数の)値は dstPtr 欄に指された変数に複写される｡ clientData 欄は無視される｡ The argument does not take any following value argument. If this argument is present, the (integer) value of the srcPtr field is copied to the variable pointed to by 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
  この引数は引続く浮動小数値引数を取る｡その値は(一度 Tcl_GetDoubleFromObj によって解析される) dstPtr 欄によって指示される変数に倍精度値として保存される｡ srcPtr と clientData 欄は無視される｡ 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
  この引数は追加的に次の値の引数を取る; それを定めるために srcPtr 内に渡された函数の回収は処理機能の責務である｡その函数は次の定義を有する: 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);

  結果は次の引数を誂えるかを定める論理値である｡ clientData は表見出しからの値であり､ objPtr は次の引数を表現する値であるが､続く引数が全くない場合は NULL である､又､ Tcl_ArgvFuncProc への 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
  この引数は零或はそれ以上の続く引数を取る; srcPtr 内に渡された函数を回収する処理機能が幾つなのかを返す(又は不都合を伝える負数､その場合､解釈実行機能の結果にも設定される)｡函数は次の定義を有することになる: 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);

  clientData は表見出しの値であり､ interp はどの不都合伝言文も保存すべき場所であり､ objc と objv は残る全引数の配列を記述し､Tcl_ArgvGenFuncProc への dstPtr 引数は解析された値(又はその複数個)を書込むべき場所である｡ The clientData is the value from the table entry, the interp is where to store any error messages, 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
  この特別の引数は何も引続く引数を取らないが､代りに､運営している引数が記述している不都合伝言文を発生する為に Tcl_ParseArgsObjv を惹き起こす｡ helpStr 欄以外の全ての他の欄は無視される｡ 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
  この引数は続く整数引数を取る｡その値は(一度 Tcl_GetIntFromObj によって解析された) dstPtr 欄に指示される変数内に整数として保存される｡ 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
  この特別の引数は何も引続く引数を取らないが､代りに､未処理で残される全ての引続く引数に印を付ける｡ srcPtr, dstPtr and clientData 欄は無視される｡ 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
  この引数は続く文字列引数を取る｡文字列へのポインターは dstPtr の箇所に保存される､内部の文字列は入って来た引数値を表現している文字列の寿命に連結した寿命を有する､又､保持される必要がある場合複写される｡ srcPtr and clientData 欄は無視される｡ 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, Tcl_Main, Tcl_CreateObjCommand

### KEYWORDS

argument, parse
Copyright © 2008 Donal K. Fellows