File Annotation

Not logged in
5128eecc9f 2011-02-23        kinaba: //--- K.I.LIB ---
5128eecc9f 2011-02-23        kinaba: // kl_cmd.h : commandline parser
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: #include "stdafx.h"
5128eecc9f 2011-02-23        kinaba: #include "kilib.h"
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: //------------------------ 文字列のメモリ処理など -----------------------//
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: kiCmdParser::kiCmdParser( char* cmd, bool ignoreFirst )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	m_Buffer = NULL;
5128eecc9f 2011-02-23        kinaba: 	if( cmd )
5128eecc9f 2011-02-23        kinaba: 		doit( cmd, ignoreFirst );
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: kiCmdParser::kiCmdParser( const char* cmd, bool ignoreFirst )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	m_Buffer=NULL;
5128eecc9f 2011-02-23        kinaba: 	if( cmd )
5128eecc9f 2011-02-23        kinaba: 	{
5128eecc9f 2011-02-23        kinaba: 		m_Buffer = new char[ ki_strlen(cmd)+1 ];
5128eecc9f 2011-02-23        kinaba: 		ki_strcpy( m_Buffer, cmd );
5128eecc9f 2011-02-23        kinaba: 		doit( m_Buffer, ignoreFirst );
5128eecc9f 2011-02-23        kinaba: 	}
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: kiCmdParser::~kiCmdParser()
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	delete [] m_Buffer;
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: //---------------------------- 分割の処理 -----------------------------//
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: void kiCmdParser::doit( char* start, bool ignoreFirst )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	char* p=start;
5128eecc9f 2011-02-23        kinaba: 	char endc;
5128eecc9f 2011-02-23        kinaba: 	bool first = true;
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 	while( *p!='\0' )
5128eecc9f 2011-02-23        kinaba: 	{
5128eecc9f 2011-02-23        kinaba: 		// 余分な空白はスキップ
5128eecc9f 2011-02-23        kinaba: 		while( *p==' ' ) //|| *p=='\t' || *p=='\r' || *p=='\n' )
5128eecc9f 2011-02-23        kinaba: 			p++;
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 		// " だったら、その旨記録してさらに一個進める
5128eecc9f 2011-02-23        kinaba: 		if( *p=='"' )
5128eecc9f 2011-02-23        kinaba: 			endc='"', p++;
5128eecc9f 2011-02-23        kinaba: 		else
5128eecc9f 2011-02-23        kinaba: 			endc=' ';
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 		// end-of-text なら終了
5128eecc9f 2011-02-23        kinaba: 		if( *p=='\0' )
5128eecc9f 2011-02-23        kinaba: 			break;
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 		if( first && ignoreFirst )
5128eecc9f 2011-02-23        kinaba: 			first = false;
5128eecc9f 2011-02-23        kinaba: 		else
5128eecc9f 2011-02-23        kinaba: 		{
5128eecc9f 2011-02-23        kinaba: 			// 引数を保存
5128eecc9f 2011-02-23        kinaba: 			if( *p=='-' )
5128eecc9f 2011-02-23        kinaba: 				m_Switch.add( p );
5128eecc9f 2011-02-23        kinaba: 			else
5128eecc9f 2011-02-23        kinaba: 				m_Param.add( p );
5128eecc9f 2011-02-23        kinaba: 		}
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 		// 引数の終わりへ…
5128eecc9f 2011-02-23        kinaba: 		while( *p!=endc && *p!='\0' )
5128eecc9f 2011-02-23        kinaba: 			p++;
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 		// 終わりは'\0'にすることによって、引数を区切る
5128eecc9f 2011-02-23        kinaba: 		if( *p!='\0' )
5128eecc9f 2011-02-23        kinaba: 			*(p++) = '\0';
5128eecc9f 2011-02-23        kinaba: 	}
5128eecc9f 2011-02-23        kinaba: }