Index: trunk/ab5.0/abdev/BasicCompiler_Common/BasicCompiler.cpp
===================================================================
--- trunk/ab5.0/abdev/BasicCompiler_Common/BasicCompiler.cpp	(revision 455)
+++ trunk/ab5.0/abdev/BasicCompiler_Common/BasicCompiler.cpp	(revision 457)
@@ -569,4 +569,112 @@
 }
 
+bool AnalysisCommandLines( bool &isFromEditor )
+{
+	// 値を初期化
+	isFromEditor = false;
+
+	// コマンドラインを解析
+	const Jenga::Common::CmdLines cmdLines( PathGetArgs( GetCommandLine() ) );
+	int cmdLineIndex = 0;
+
+	if( cmdLines.size() == 0 )
+	{
+		// 何も指定されていないとき
+		return true;
+	}
+
+	if( cmdLines[cmdLineIndex].IsNamelessCommand() )
+	{
+		// 先頭に無名コマンドがきた場合、ソースファイル名として認識する
+		lstrcpy( SourceFileName, cmdLines[cmdLineIndex].GetParameter().c_str() );
+
+		cmdLineIndex ++;
+
+		if( cmdLines.size() == 1 )
+		{
+			// ソースファイル名のみの指定だったとき
+			return true;
+		}
+
+		// 出力ファイル名を取得
+		if( cmdLines[cmdLineIndex].IsNamelessCommand() )
+		{
+			// 二番目にも無名コマンドがきた場合、ソースファイル名として認識する
+			lstrcpy( OutputFileName, cmdLines[cmdLineIndex].GetParameter().c_str() );
+
+			cmdLineIndex ++;
+		}
+	}
+
+	for( ; cmdLineIndex < static_cast<int>(cmdLines.size()); cmdLineIndex++ )
+	{
+		const Jenga::Common::CmdLine &cmdLine = cmdLines[cmdLineIndex];
+
+		if( cmdLine.GetCommand() == "wnd" )
+		{
+			// 親エディタのウィンドウ ハンドル
+			isFromEditor = true;
+			sscanf( cmdLine.GetParameter().c_str(), "%08x", &hOwnerEditor );
+		}
+		else if( cmdLine.GetCommand() == "debug" )
+		{
+			// デバッグ ビルド
+			bDebugCompile = 1;
+		}
+		else if( cmdLine.GetCommand() == "run" )
+		{
+			// デバッグ実行
+			bDebugRun = 1;
+		}
+		else if( cmdLine.GetCommand() == "attach" )
+		{
+			// アタッチ
+			bDebugRun=1;
+			bAttach=1;
+			sscanf( cmdLine.GetParameter().c_str(), "%08x", &dwAttachProcessId );
+		}
+		else if( cmdLine.GetCommand() == "dll" )
+		{
+			// DLLとしてビルド
+			compiler.SetTargetModuleType( Compiler::Dll );
+		}
+		else if( cmdLine.GetCommand() == "static_library" )
+		{
+			// 静的リンクライブラリとしてビルド
+			compiler.SetTargetModuleType( Compiler::StaticLibrary );
+		}
+		else if( cmdLine.GetCommand() == "unicode" )
+		{
+			// Unicode
+			Smoothie::SetUnicodeMark( true );
+			typeOfPtrChar = MAKE_PTR_TYPE(DEF_WORD,1);
+			typeOfPtrUChar = MAKE_PTR_TYPE(DEF_WORD,1);
+		}
+		else if( cmdLine.GetCommand() == "clip_compile_view" )
+		{
+			//埋め込み型コンパイラビュー
+			bClipCompileView = 1;
+		}
+		else if( cmdLine.GetCommand() == "include_dir" )
+		{
+			//インクルード ディレクトリ
+			lstrcpy( szIncludeDir, cmdLine.GetParameter().c_str() );
+		}
+		else
+		{
+			// 不正なコマンド
+			std::string keyword = cmdLine.GetCommand();
+			if( keyword.size() == 0 )
+			{
+				keyword = cmdLine.GetParameter();
+			}
+			std::cout << keyword << " コマンドとして認識できません。" << std::endl;
+			return false;
+		}
+	}
+
+	return true;
+}
+
 void _Test()
 {
@@ -577,9 +685,8 @@
 int main()
 {
-	int i,i2;
+	int i;
 	char temporary[1024],temp2[MAX_PATH];
 
 	hInst = GetModuleHandle( NULL );
-	LPSTR lpCmdLine = PathGetArgs( GetCommandLine() );
 
 	//_Test();
@@ -599,160 +706,9 @@
 	pobj_nv->load();
 
-	//ソースファイル名を取得
-	i=0;
-	if(lpCmdLine[0]!='/'){
-		if(lpCmdLine[0]=='\"'){
-			for(i=1,i2=0;;i++,i2++){
-				if(lpCmdLine[i]=='\"'){
-					SourceFileName[i2]=0;
-					break;
-				}
-				SourceFileName[i2]=lpCmdLine[i];
-				if(lpCmdLine[i]=='\0') break;
-			}
-			i++;
-			while(lpCmdLine[i]==' ') i++;
-		}
-		else{
-			for(i=0;;i++){
-				if(lpCmdLine[i]==' '){
-					SourceFileName[i]=0;
-					break;
-				}
-				SourceFileName[i]=lpCmdLine[i];
-				if(lpCmdLine[i]=='\0') break;
-			}
-			while(lpCmdLine[i]==' ') i++;
-		}
-	}
-
-	BOOL bFromEditor=0;
-	OutputFileName[0]=0;
-	if(lpCmdLine[i]&&lpCmdLine[i]!='/'){
-		if(lpCmdLine[i]=='\"'){
-			for(i++,i2=0;;i++,i2++){
-				if(lpCmdLine[i]=='\"'){
-					OutputFileName[i2]=0;
-					break;
-				}
-				OutputFileName[i2]=lpCmdLine[i];
-				if(lpCmdLine[i]=='\0') break;
-			}
-			i++;
-			while(lpCmdLine[i]==' ') i++;
-		}
-		else{
-			for(i2=0;;i++,i2++){
-				if(lpCmdLine[i]==' '){
-					OutputFileName[i2]=0;
-					break;
-				}
-				OutputFileName[i2]=lpCmdLine[i];
-				if(lpCmdLine[i]=='\0') break;
-			}
-			while(lpCmdLine[i]==' ') i++;
-		}
-	}
-
-	KillSpaces(lpCmdLine+i,temporary);
-	i=0;
-	while(temporary[i]=='/'){
-		for(i++,i2=0;;i++,i2++){
-			if(temporary[i]=='/'){
-				temp2[i2]=0;
-				break;
-			}
-			if(temporary[i]==':'){
-				temp2[i2]=0;
-				break;
-			}
-			temp2[i2]=temporary[i];
-			if(temporary[i]=='\0') break;
-		}
-
-		char temp3[MAX_PATH];
-		if(temporary[i]==':'){
-			i++;
-			if(temporary[i]=='\"'){
-				for(i++,i2=0;;i++,i2++){
-					if(temporary[i]=='\"'){
-						temp3[i2]=0;
-						RemoveStringQuotes(temp3);
-						i++;
-						break;
-					}
-					temp3[i2]=temporary[i];
-					if(temporary[i]=='\0') break;
-				}
-			}
-			else{
-				for(i2=0;;i++,i2++){
-					if(temporary[i]=='/'){
-						temp3[i2]=0;
-						break;
-					}
-					if(temporary[i]==':'){
-						temp3[i2]=0;
-						break;
-					}
-					temp3[i2]=temporary[i];
-					if(temporary[i]=='\0') break;
-				}
-			}
-		}
-		else temp3[0]=0;
-
-
-		/////////////////////////
-		// コマンドラインを調査
-		/////////////////////////
-
-		//ウィンドウハンドル
-		if(lstrcmp(temp2,"wnd")==0){
-			bFromEditor=1;
-
-			if(temp3[0]) sscanf(temp3,"%08x",&hOwnerEditor);
-		}
-
-		//デバッグコンパイル
-		else if(lstrcmp(temp2,"debug")==0) bDebugCompile=1;
-
-		//デバッグ実行
-		else if(lstrcmp(temp2,"run")==0) bDebugRun=1;
-
-		//デバッグ実行（アタッチする）
-		else if(lstrcmp(temp2,"attach")==0){
-			bDebugRun=1;
-			bAttach=1;
-
-			if(temp3[0]) sscanf(temp3,"%08x",&dwAttachProcessId);
-		}
-
-		//DLL生成
-		else if(lstrcmp(temp2,"dll")==0)
-		{
-			compiler.SetTargetModuleType( Compiler::Dll );
-		}
-
-		// StaticLibrary生成
-		else if( lstrcmp( temp2, "static_library" ) ==0 )
-		{
-			compiler.SetTargetModuleType( Compiler::StaticLibrary );
-		}
-
-		//Unicode
-		else if( lstrcmp( temp2, "unicode" ) ==0 ){
-			Smoothie::SetUnicodeMark( true );
-			typeOfPtrChar = MAKE_PTR_TYPE(DEF_WORD,1);
-			typeOfPtrUChar = MAKE_PTR_TYPE(DEF_WORD,1);
-		}
-
-		//埋め込み型コンパイラビュー
-		else if(lstrcmp(temp2,"clip_compile_view")==0) bClipCompileView=1;
-
-		//インクルードディレクトリ
-		else if(lstrcmp(temp2,"include_dir")==0){
-			lstrcpy(szIncludeDir,temp3);
-		}
+	bool isFromEditor;
+	if( !AnalysisCommandLines( isFromEditor ) )
+	{
+		// コマンドラインが不正
+		return 0;
 	}
 
@@ -893,5 +849,8 @@
 	SetWindowLongPtr(GetDlgItem(hMainDlg,IDC_DEBUGLIST),GWLP_WNDPROC,(LONG_PTR)DebugListProc);
 
-	if(bFromEditor) SendMessage(hMainDlg,WM_COMMAND,IDOK,0);
+	if( isFromEditor )
+	{
+		SendMessage(hMainDlg,WM_COMMAND,IDOK,0);
+	}
 
 	MSG msg;
