Index: trunk/ab5.0/abdev/BasicCompiler_Common/BasicCompiler.cpp
===================================================================
--- trunk/ab5.0/abdev/BasicCompiler_Common/BasicCompiler.cpp	(revision 465)
+++ trunk/ab5.0/abdev/BasicCompiler_Common/BasicCompiler.cpp	(revision 467)
@@ -1,5 +1,3 @@
 #include "stdafx.h"
-
-#include <shlwapi.h>
 
 #include <jenga/include/common/Path.h>
@@ -320,11 +318,11 @@
 }
 void MakeMessageText(char *buffer,char *msg,int flag){
-	char temporary[MAX_PATH];
-	if(bClipCompileView){
+	if( program.IsClipCompileView() ){
 		//ProjectView埋め込みがたインターフェイスのとき
 
 		//生成するファイルの相対パスを取得
-		lstrcpy(temporary,OutputFileName);
-		GetRelationalPath(temporary,BasicCurDir);
+		char relationalPath[MAX_PATH];
+		lstrcpy( relationalPath, program.GetOutputFilePath().c_str() );
+		GetRelationalPath( relationalPath, BasicCurDir );
 
 		//////////
@@ -336,17 +334,17 @@
 			if(compiler.IsDll())
 			{
-				sprintf(buffer,"DLLファイル \"%s\"     [ %s ]",temporary,msg);
-			}
-			else sprintf(buffer,"実行ファイル \"%s\"     [ %s ]",temporary,msg);
-		}
-		if(flag==1) sprintf(buffer,"\"%s\" を生成しています     [ %s ]",temporary,msg);
+				sprintf(buffer,"DLLファイル \"%s\"     [ %s ]",relationalPath,msg);
+			}
+			else sprintf(buffer,"実行ファイル \"%s\"     [ %s ]",relationalPath,msg);
+		}
+		if(flag==1) sprintf(buffer,"\"%s\" を生成しています     [ %s ]",relationalPath,msg);
 		if(flag==2) lstrcpy(buffer,msg);
 #else
 		//英語
 		if(flag==0){
-			if(compiler.IsDll()) sprintf(buffer,"DLL file \"%s\"     [ %s ]",temporary,msg);
-			else sprintf(buffer,"Execution file \"%s\"     [ %s ]",temporary,msg);
-		}
-		if(flag==1) sprintf(buffer,"Creating \"%s\"     [ %s ]",temporary,msg);
+			if(compiler.IsDll()) sprintf(buffer,"DLL file \"%s\"     [ %s ]",relationalPath,msg);
+			else sprintf(buffer,"Execution file \"%s\"     [ %s ]",relationalPath,msg);
+		}
+		if(flag==1) sprintf(buffer,"Creating \"%s\"     [ %s ]",relationalPath,msg);
 		if(flag==2) lstrcpy(buffer,msg);
 #endif
@@ -378,5 +376,4 @@
 	extern HANDLE hDebugProcess;
 	char temporary[MAX_PATH];
-	DWORD dw;
 	RECT rect;
 	POINT pos;
@@ -393,7 +390,8 @@
 			MoveWindow(hwnd,pos.x,pos.y,size.cx,size.cy,1);
 
-			lstrcpy(temporary,OutputFileName);
-			GetRelationalPath(temporary,BasicCurDir);
-			SetDlgItemText(hwnd,IDC_EXEPATH,temporary);
+			char relationalPath[MAX_PATH];
+			lstrcpy(relationalPath,program.GetOutputFilePath().c_str());
+			GetRelationalPath(relationalPath,BasicCurDir);
+			SetDlgItemText(hwnd,IDC_EXEPATH,relationalPath);
 
 			//"エラー無し"
@@ -428,7 +426,10 @@
 					//STRING_COMPILE = "コンパイル"
 					if(lstrcmp(temporary,STRING_COMPILE)==0){
-						GetDlgItemText(hwnd,IDC_EXEPATH,OutputFileName,MAX_PATH);
-						GetFullPath(OutputFileName,BasicCurDir);
-						CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)MainThread,0,0,&dw);
+						char tempOutputFileName[MAX_PATH];
+						GetDlgItemText(hwnd,IDC_EXEPATH,tempOutputFileName,MAX_PATH);
+						program.SetOutputFilePath(
+							Jenga::Common::Path::MakeFullPath( tempOutputFileName, BasicCurDir )
+						);
+						_beginthread( &MainThread, NULL, NULL );
 					}
 
@@ -493,5 +494,5 @@
 			break;
 		case WM_SHOWVARLIST:
-			if(bClipCompileView){
+			if( program.IsClipCompileView() ){
 				//埋め込み表示
 				CreateDialogParam(hInst,MAKEINTRESOURCE(IDD_DEBUGGER),hOwnerEditor,(DLGPROC)DlgDebugger,lParam);
@@ -507,5 +508,5 @@
 			return 1;
 		case WM_SIZE:
-			if(bClipCompileView){
+			if( program.IsClipCompileView() ){
 				//エラーリストの位置
 				MoveWindow(GetDlgItem(hwnd,IDC_ERRORLIST),
@@ -536,5 +537,5 @@
 			GetWindowRect(hwnd,&rect);
 
-			if(!bClipCompileView){
+			if( !program.IsClipCompileView() ){
 				pobj_nv->MainDlgPos.x=rect.left;
 				pobj_nv->MainDlgPos.y=rect.top;
@@ -567,112 +568,4 @@
 }
 
-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" )
-		{
-			// デバッグ ビルド
-			compiler.SetDebugMark( true );
-		}
-		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
-			compiler.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()
 {
@@ -704,6 +597,5 @@
 	pobj_nv->load();
 
-	bool isFromEditor;
-	if( !AnalysisCommandLines( isFromEditor ) )
+	if( !program.AnalysisCommandLines() )
 	{
 		// コマンドラインが不正
@@ -712,36 +604,45 @@
 
 	//ソースファイル名が与えられなかったとき
-	if(SourceFileName[0]=='\0'){
-		if(!GetFilePathDialog(0,SourceFileName,BasicFileFilter,"コンパイルするファイルを指定して下さい",1))
+	if( program.GetSourceFilePath().size() == 0 )
+	{
+		char temp[MAX_PATH];
+		if(!GetFilePathDialog(0,temp,BasicFileFilter,"コンパイルするファイルを指定して下さい",1))
+		{
 			return 0;
+		}
+		program.SetSourceFilePath( temp );
 	}
 
 	//出力ファイル名が与えられなかったとき
-	if(OutputFileName[0]=='\0'){
-		_splitpath(SourceFileName,OutputFileName,temporary,temp2,0);
-		lstrcat(OutputFileName,temporary);
-		lstrcat(OutputFileName,temp2);
+	if( program.GetOutputFilePath().size() == 0 )
+	{
+		char tempOutputFileName[MAX_PATH];
+		_splitpath( program.GetSourceFilePath().c_str(), tempOutputFileName,temporary,temp2,0);
+		lstrcat(tempOutputFileName,temporary);
+		lstrcat(tempOutputFileName,temp2);
 		if( compiler.IsStaticLibrary() )
 		{
-			if( bDebugRun || compiler.IsDebug() )
+			if( program.IsDebugRun() || compiler.IsDebug() )
 			{
-				lstrcat(OutputFileName,"_debug.abobj");
+				lstrcat(tempOutputFileName,"_debug.abobj");
 			}
 			else
 			{
-				lstrcat(OutputFileName,".abobj");
+				lstrcat(tempOutputFileName,".abobj");
 			}
 		}
 		else
 		{
-			if( bDebugRun || compiler.IsDebug() )
+			if( program.IsDebugRun() || compiler.IsDebug() )
 			{
-				lstrcat(OutputFileName,"_debug.exe");
+				lstrcat(tempOutputFileName,"_debug.exe");
 			}
 			else
 			{
-				lstrcat(OutputFileName,".exe");
-			}
-		}
+				lstrcat(tempOutputFileName,".exe");
+			}
+		}
+
+		program.SetOutputFilePath( tempOutputFileName );
 	}
 
@@ -751,33 +652,33 @@
 
 		// インクルードディレクトリが指定されなかったとき
-		if(szIncludeDir[0]=='\0'){
-			lstrcpy(szIncludeDir,".\\Include\\");
-
-			// インクルードディレクトリを絶対パスに変更
-			GetFullPath(szIncludeDir,baseDirPath.c_str());
+		if( program.GetIncludeDir().size() == 0 )
+		{
+			program.SetIncludeDir( Jenga::Common::Path::MakeFullPath( ".\\Include\\", baseDirPath ) );
 		}
 		else
 		{
 			// インクルードディレクトリを絶対パスに変更
-			GetFullPath(szIncludeDir,baseDirPath.c_str());
+			program.SetIncludeDir( Jenga::Common::Path::MakeFullPath( program.GetIncludeDir(), baseDirPath ) );
 		}
 
 		// ソースファイル名を絶対パスに変換
-		GetFullPath(SourceFileName,baseDirPath.c_str());
+		program.SetSourceFilePath( Jenga::Common::Path::MakeFullPath( program.GetSourceFilePath(), baseDirPath ) );
 
 		// 出力ファイル名を絶対パスに変換
-		GetFullPath(OutputFileName,baseDirPath.c_str());
+		program.SetOutputFilePath( Jenga::Common::Path::MakeFullPath( program.GetOutputFilePath(), baseDirPath ) );
 
 		// モジュール名をセット
-		compiler.SetModuleName( Jenga::Common::Path( OutputFileName ).GetFileName() );
-	}
-
-	if( compiler.IsDll() ){
+		compiler.SetModuleName( Jenga::Common::Path( program.GetOutputFilePath() ).GetFileName() );
+	}
+
+	if( compiler.IsDll() )
+	{
 		//DLLファイル名を取得
-		_splitpath(OutputFileName,NULL,NULL,szDllName,temporary);
+		_splitpath( program.GetOutputFilePath().c_str(),NULL,NULL,szDllName,temporary);
 		lstrcat(szDllName,temporary);
 	}
 
-	if(bDebugRun){
+	if( program.IsDebugRun() )
+	{
 		//コマンドライン、DLLの実行可能アプリケーションを取得
 		HANDLE hFile;
@@ -805,8 +706,8 @@
 	}
 
-	_splitpath(SourceFileName,BasicCurDir,temporary,NULL,NULL);
+	_splitpath( program.GetSourceFilePath().c_str(), BasicCurDir,temporary,NULL,NULL);
 	lstrcat(BasicCurDir,temporary);
 
-	if(bClipCompileView){
+	if( program.IsClipCompileView() ){
 		//ProjectEditor埋め込み型インターフェイス
 		hMainDlg=CreateDialog(hInst,MAKEINTRESOURCE(IDD_CLIPMAIN),hOwnerEditor,(DLGPROC)DlgCompile);
@@ -840,5 +741,5 @@
 	SetWindowLongPtr(GetDlgItem(hMainDlg,IDC_DEBUGLIST),GWLP_WNDPROC,(LONG_PTR)DebugListProc);
 
-	if( isFromEditor )
+	if( program.IsKickedFromEditor() )
 	{
 		SendMessage(hMainDlg,WM_COMMAND,IDOK,0);
@@ -861,5 +762,5 @@
 #endif
 
-	if(bClipCompileView){
+	if( program.IsClipCompileView() ){
 		SendMessage(hOwnerEditor,WM_DESTROYCOMPILEVIEW,0,0);
 	}
