Artifact Content

Not logged in

Artifact 815f69faf09d6d48855316ccf5d6c0b2cd95442a


//--- K.I.LIB ---
// kl_cmd.h : commandline parser

#include "stdafx.h"
#include "kilib.h"


//------------------------ 文字列のメモリ処理など -----------------------//


kiCmdParser::kiCmdParser( char* cmd, bool ignoreFirst )
{
	m_Buffer = NULL;
	if( cmd )
		doit( cmd, ignoreFirst );
}

kiCmdParser::kiCmdParser( const char* cmd, bool ignoreFirst )
{
	m_Buffer=NULL;
	if( cmd )
	{
		m_Buffer = new char[ ki_strlen(cmd)+1 ];
		ki_strcpy( m_Buffer, cmd );
		doit( m_Buffer, ignoreFirst );
	}
}

kiCmdParser::~kiCmdParser()
{
	delete [] m_Buffer;
}


//---------------------------- 分割の処理 -----------------------------//


void kiCmdParser::doit( char* start, bool ignoreFirst )
{
	char* p=start;
	char endc;
	bool first = true;

	while( *p!='\0' )
	{
		// 余分な空白はスキップ
		while( *p==' ' ) //|| *p=='\t' || *p=='\r' || *p=='\n' )
			p++;

		// " だったら、その旨記録してさらに一個進める
		if( *p=='"' )
			endc='"', p++;
		else
			endc=' ';

		// end-of-text なら終了
		if( *p=='\0' )
			break;

		if( first && ignoreFirst )
			first = false;
		else
		{
			// 引数を保存
			if( *p=='-' )
				m_Switch.add( p );
			else
				m_Param.add( p );
		}

		// 引数の終わりへ…
		while( *p!=endc && *p!='\0' )
			p++;

		// 終わりは'\0'にすることによって、引数を区切る
		if( *p!='\0' )
			*(p++) = '\0';
	}
}