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

m_cmdline_parser.hsp

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

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

		【依存モジュール】
		gm_record_str.hsp

***********************************************************/
#ifndef	__M_CMDLINE_PARSER__
#define	global	__M_CMDLINE_PARSER__


#include "gm_record_str.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@	// RECORD_STR_ALL -> gm_record_str.hspを参照
	split prms,items

	/* 引数とオプション文字列を取得 */
	i = 0
	repeat length(items)
		if peek(items(i), 0)=CHAR_CODE_OPTION {
			getstr tmpstr, items(i) ,1		// オプション指定文字列を取得
			_optchars += tmpstr
		}
		else {
			break
		}
		i ++
	loop
	repeat length(items)-i
		_args(cnt)	= items(cnt+i)
		_argc ++
	loop
	return

/**********************************************************/
// 任意のオプションが指定されているかチェック
/**********************************************************/
#defcfunc chkopt	str optchar
	if instr(_optchars, , optchar)>-1 {
		return TRUE
	}
	return FALSE

/**********************************************************/
// 指定したインデックスの引数を取得(オプション文字列を除く)
/**********************************************************/
#defcfunc getarg	int argi
	if argi<_argc {
		return _args(argi)	}
	return ""

/**********************************************************/
#global


	parse_cmdline dir_cmdline


#endif