SCAN_OPTION 3.01
Copyright (C) 1996,1997,1999 Taiji Yamada <taiji@aihara.co.jp>
[戻る] [English Page]
名前
scan_option - オプション解析ルーチン
形式
#include <option.h>
int scan_option(int argc, char *argv[], char *key, ...);
argc - コマンドライン引数の数
argv - コマンドライン引数
key, ... - キーを表す文字列と可変引数
説明
-
コマンドラインオプション中に指定されたキーが存在する場合、真を返します。例えば、コマンドラインで
"-help"
が指定されていた場合、
scan_option(argc, argv, "-help")
は真を返します。
コマンドラインオプション中に指定されたキーが存在し、そのキーが scanf 書式を持つ場合、キーの後に指定された可変引数にコマンドライン中の値をセットし、真を返します。例えば、コマンドライン中に
"-geom
100x100" が指定された場合、
scan_option(argc, argv, "-geom %dx%d", &width, &height)
は真を返し、width, height にはそれぞれ整数値 100, 100
が代入されます。
コマンドラインオプション中に指定されたキーが存在し、そのキーが scanf 書式の
"%s"
が指定されていた場合、キーの後に指定された可変引数にコマンドライン中のマッチした引数の次の文字列をセットします。例えば、コマンドライン中に
'-title
"A string"' が指定された場合、この "A string" は引数の単一の要素なので、
scan_option(argc, argv, "-title %s", title)
は文字列変数 title に "A string" をセットし真を返します。
コマンドラインオプション中に指定されたキーが存在し、そのキーが scanf 書式の
"\"%s\""
が指定されていた場合、キーの後に指定された可変引数にコマンドライン中のマッチした引数の次の文字列をセットします。例えば、コマンドライン中に
'-title
\"A string\"' が指定された場合、この "A string" が引数の単一の要素でなくても、ダブルクオートで括られていることから、
scan_option(argc, argv, "-title \"%s\"", title)
は文字列変数 title に "A string" をセットし真を返します。ダブルクオートで括られていない場合の動作は
"-title
%s" と同じ動作になります。
キーが "-on[-]" のような形式の場合、そのキーはフラグであるとみなし、可変引数に
int
型のポインタを期待します。例えば、コマンドラインに "-on" が指定された場合、
scan_option(argc, argv, "-on[-]", &flag)
は int 型のポインタ flag に真を代入します。"-on-"
が指定された場合には flag には偽が代入され、いずれの場合にも真を返します。
また、キーが "[-+]mode" もしくは "[+-]mode" のような形式の場合、そのキーもフラグであるとみなし、可変引数に
int
型のポインタを期待します。例えば、コマンドラインに "-mode" が指定された場合、
scan_option(argc, argv, "[-+]mode", &flag)
は int 型のポインタ flag に真を代入します。"+mode"
が指定された場合には flag には偽が代入され、いずれの場合にも真を返します。
一方、
scan_option(argc, argv, "[+-]mode", &flag)
は、コマンドラインに "-mode" が指定された場合には、int
型のポインタ flag に偽を代入し、"+mode" が指定された場合には
flag
には真が代入され、いずれの場合にも真を返します。
またキーが "-color Red Green Blue" のように、scanf 形式でもなく、中途に空白を含む場合、それは列挙型を期待するキーであるとみなし、可変引数に
int
型のポインタを期待します。例えば、コマンドラインに "-color Blue"
が指定された場合、
scan_option(argc, argv, "-color Red Green Blue", &color)
は int 型の変数 color に 2 を代入し、真を返します。
また、上記すべての scan_option が返す真とは、正確には、キーがマッチしたコマンドライン引数の番号であり、例えば、以下のような使い方が可能です。
if ((c=scan_option(argc, argv, "-f")) {
c++; n = 0;
while (c<argc)
strcpy(files[n++], argv[c++]);
}
作者