Artifact Content

Not logged in

Artifact 815f69faf09d6d48855316ccf5d6c0b2cd95442a


     1  //--- K.I.LIB ---
     2  // kl_cmd.h : commandline parser
     3  
     4  #include "stdafx.h"
     5  #include "kilib.h"
     6  
     7  
     8  //------------------------ 文字列のメモリ処理など -----------------------//
     9  
    10  
    11  kiCmdParser::kiCmdParser( char* cmd, bool ignoreFirst )
    12  {
    13  	m_Buffer = NULL;
    14  	if( cmd )
    15  		doit( cmd, ignoreFirst );
    16  }
    17  
    18  kiCmdParser::kiCmdParser( const char* cmd, bool ignoreFirst )
    19  {
    20  	m_Buffer=NULL;
    21  	if( cmd )
    22  	{
    23  		m_Buffer = new char[ ki_strlen(cmd)+1 ];
    24  		ki_strcpy( m_Buffer, cmd );
    25  		doit( m_Buffer, ignoreFirst );
    26  	}
    27  }
    28  
    29  kiCmdParser::~kiCmdParser()
    30  {
    31  	delete [] m_Buffer;
    32  }
    33  
    34  
    35  //---------------------------- 分割の処理 -----------------------------//
    36  
    37  
    38  void kiCmdParser::doit( char* start, bool ignoreFirst )
    39  {
    40  	char* p=start;
    41  	char endc;
    42  	bool first = true;
    43  
    44  	while( *p!='\0' )
    45  	{
    46  		// 余分な空白はスキップ
    47  		while( *p==' ' ) //|| *p=='\t' || *p=='\r' || *p=='\n' )
    48  			p++;
    49  
    50  		// " だったら、その旨記録してさらに一個進める
    51  		if( *p=='"' )
    52  			endc='"', p++;
    53  		else
    54  			endc=' ';
    55  
    56  		// end-of-text なら終了
    57  		if( *p=='\0' )
    58  			break;
    59  
    60  		if( first && ignoreFirst )
    61  			first = false;
    62  		else
    63  		{
    64  			// 引数を保存
    65  			if( *p=='-' )
    66  				m_Switch.add( p );
    67  			else
    68  				m_Param.add( p );
    69  		}
    70  
    71  		// 引数の終わりへ…
    72  		while( *p!=endc && *p!='\0' )
    73  			p++;
    74  
    75  		// 終わりは'\0'にすることによって、引数を区切る
    76  		if( *p!='\0' )
    77  			*(p++) = '\0';
    78  	}
    79  }