/***********************************************************
コマンドライン解析モジュール
【依存モジュール】
gm_record_str.hsp
gm_rmquote.hsp
【関数一覧】
任意のオプションが指定されているかチェック(1文字のオプションのみ)
#defcfunc chkopt str optchar
// optchar : チェック対象のオプション文字
// 戻り値 : TRUE(1) or FALSE(0)
指定したインデックスの引数を取得
#defcfunc getarg int argi, int rmquote_flag
// argi : 引数インデックス(first=0 / オプション指定文字列を除く)
// rmquote_flag : 引数が""に囲まれていた場合にそれを削除するかどうか(1(yes) or 0(no))
// 戻り値 : 引数文字列
***********************************************************/
#ifndef __M_CMDLINE_PARSER__
#define global __M_CMDLINE_PARSER__
#include "gm_record_str.hsp"
#include "gm_rmquote.hsp"
#module
#const TRUE 1
#const FALSE 0
#define CMDLINE_DELIMITER " "
#define CHAR_DQUOT "\""
#define CHAR_CODE_OPTION '/'
/**********************************************************/
// コマンドライン解析
// (ファイル末尾で呼び出し済み)
/**********************************************************/
#deffunc parse_cmdline str cmdline
_argc = 0
_args = ""
_optchars = ""
/* 項目を切り分け */
sdim items,2,2
prms = cmdline,CMDLINE_DELIMITER,CHAR_DQUOT,RECORD_STR_ALL@
split prms,items
/* 引数とオプション文字列を選別 */
repeat length(items)
if peek(items(cnt), 0)=CHAR_CODE_OPTION {
getstr tmpstr, items(cnt), 1 // オプション指定文字列を取得
_optchars += tmpstr
}
else {
_args(_argc) = items(cnt) // 引数を取得
_argc ++
}
loop
return
/**********************************************************/
// 任意のオプションが指定されているかチェック
/**********************************************************/
#defcfunc chkopt str optchar
// optchar : チェック対象のオプション文字
if instr(_optchars, , optchar)>-1 {
return TRUE
}
return FALSE
/**********************************************************/
// 指定したインデックスの引数を取得(オプション文字列を除く)
/**********************************************************/
#defcfunc getarg int argi, int rmquote_flag
// argi : 引数インデックス(first=0)
// rmquote_flag : 引数が""に囲まれていた場合にそれを削除するかどうか(1(yes) or 0(no))
if (argi<_argc)&(argi>=0) { // インデックスが不正でない
arg = _args(argi)
if rmquote_flag {
rmquote arg, TYPE_DQUOTE@
}
return arg
}
return ""
/**********************************************************/
#global
parse_cmdline dir_cmdline
#endif
|