プログラミング工房 > HSP > サンプルアプリケーション > downloader > 

m_cmdline_parser.hsp

/***********************************************************

コマンドライン解析モジュール

	【依存モジュール】

		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