Index: trunk/ab5.0/abdev/BasicCompiler_Common/src/Program.cpp
===================================================================
--- trunk/ab5.0/abdev/BasicCompiler_Common/src/Program.cpp	(revision 465)
+++ trunk/ab5.0/abdev/BasicCompiler_Common/src/Program.cpp	(revision 467)
@@ -1,3 +1,5 @@
 #include "stdafx.h"
+
+#include <shlwapi.h>
 
 #include <jenga/include/common/Environment.h>
@@ -6,2 +8,109 @@
 
 Jenga::Common::Logger Program::logger( Jenga::Common::Environment::GetAppDir() + "\\logger.log", true );
+
+Program program;
+
+bool Program::AnalysisCommandLines()
+{
+	// コマンドラインを解析
+	const Jenga::Common::CmdLines cmdLines( PathGetArgs( GetCommandLine() ) );
+	int cmdLineIndex = 0;
+
+	if( cmdLines.size() == 0 )
+	{
+		// 何も指定されていないとき
+		return true;
+	}
+
+	if( cmdLines[cmdLineIndex].IsNamelessCommand() )
+	{
+		// 先頭に無名コマンドがきた場合、ソースファイル名として認識する
+		Program::SetSourceFilePath( cmdLines[cmdLineIndex].GetParameter() );
+
+		cmdLineIndex ++;
+
+		if( cmdLines.size() == 1 )
+		{
+			// ソースファイル名のみの指定だったとき
+			return true;
+		}
+
+		// 出力ファイル名を取得
+		if( cmdLines[cmdLineIndex].IsNamelessCommand() )
+		{
+			// 二番目にも無名コマンドがきた場合、ソースファイル名として認識する
+			SetOutputFilePath( cmdLines[cmdLineIndex].GetParameter() );
+
+			cmdLineIndex ++;
+		}
+	}
+
+	for( ; cmdLineIndex < static_cast<int>(cmdLines.size()); cmdLineIndex++ )
+	{
+		const Jenga::Common::CmdLine &cmdLine = cmdLines[cmdLineIndex];
+
+		if( cmdLine.GetCommand() == "wnd" )
+		{
+			// 親エディタのウィンドウ ハンドル
+			isKickedFromEditor = true;
+			sscanf( cmdLine.GetParameter().c_str(), "%08x", &hOwnerEditor );
+		}
+		else if( cmdLine.GetCommand() == "debug" )
+		{
+			// デバッグ ビルド
+			compiler.SetDebugMark( true );
+		}
+		else if( cmdLine.GetCommand() == "run" )
+		{
+			// デバッグ実行
+			isDebugRun = true;
+		}
+		else if( cmdLine.GetCommand() == "attach" )
+		{
+			// アタッチ
+			isDebugRun = true;
+			isAttach = true;
+			sscanf( cmdLine.GetParameter().c_str(), "%08x", &attachProcessId );
+		}
+		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
+			compiler.SetUnicodeMark( true );
+			typeOfPtrChar = MAKE_PTR_TYPE(DEF_WORD,1);
+			typeOfPtrUChar = MAKE_PTR_TYPE(DEF_WORD,1);
+		}
+		else if( cmdLine.GetCommand() == "clip_compile_view" )
+		{
+			//埋め込み型コンパイラビュー
+			isClipCompileView = true;
+		}
+		else if( cmdLine.GetCommand() == "include_dir" )
+		{
+			//インクルード ディレクトリ
+			includeDir = cmdLine.GetParameter();
+		}
+		else
+		{
+			// 不正なコマンド
+			std::string keyword = cmdLine.GetCommand();
+			if( keyword.size() == 0 )
+			{
+				keyword = cmdLine.GetParameter();
+			}
+			std::cout << keyword << " コマンドとして認識できません。" << std::endl;
+			return false;
+		}
+	}
+
+	return true;
+}
Index: trunk/ab5.0/abdev/BasicCompiler_Common/src/Source.cpp
===================================================================
--- trunk/ab5.0/abdev/BasicCompiler_Common/src/Source.cpp	(revision 465)
+++ trunk/ab5.0/abdev/BasicCompiler_Common/src/Source.cpp	(revision 467)
@@ -556,5 +556,4 @@
 void BasicSource::DirectiveIncludeOrRequire(){
 	extern HANDLE hHeap;
-	extern char szIncludeDir[MAX_PATH];
 	extern char BasicCurDir[MAX_PATH];
 	int i,i2,i3,sw1,LineNum,FileLayer[255],layer,LastFileByte[255];
@@ -572,6 +571,5 @@
 
 	// メインソースコード
-	extern char SourceFileName[MAX_PATH];
-	FileLayer[layer] = includedFilesRelation.AddFile( SourceFileName );
+	FileLayer[layer] = includedFilesRelation.AddFile( program.GetSourceFilePath() );
 
 	//参照ディレクトリ
@@ -616,5 +614,5 @@
 
 					if(sw1){
-						sprintf(temp2,"%s%s",szIncludeDir,temporary);
+						sprintf(temp2,"%s%s", program.GetIncludeDir().c_str(), temporary );
 						lstrcpy(temporary,temp2);
 					}
@@ -626,9 +624,9 @@
 			else if(memcmp(buffer+i+1,"prompt",6)==0){
 				i2=i+7;
-				sprintf(temporary,"%sbasic\\prompt.sbp",szIncludeDir);
+				sprintf(temporary,"%sbasic\\prompt.sbp", program.GetIncludeDir().c_str() );
 			}
 			else if(memcmp(buffer+i+1,"N88BASIC",8)==0){
 				i2=i+9;
-				sprintf(temporary,"%sbasic\\prompt.sbp",szIncludeDir);
+				sprintf(temporary,"%sbasic\\prompt.sbp", program.GetIncludeDir().c_str() );
 			}
 			else if(memcmp(buffer+i+1,"console",7)==0){
@@ -638,5 +636,5 @@
 
 				i2=i+8;
-				sprintf(temporary,"%sbasic\\dos_console.sbp",szIncludeDir);
+				sprintf(temporary,"%sbasic\\dos_console.sbp", program.GetIncludeDir().c_str() );
 			}
 			else continue;
