File Annotation

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